2017-09-26 52 views
3

我試圖使用moment.js將存儲在數據庫中的日期(設置爲Europe/London時區)與當前用戶時間進行比較,並考慮到它們的時區。時刻JS - 正確比較當地時間的方法

我從數據庫返回的日期字符串,是想用fromNow()功能,如下所示:

console.log(dbDate); 
console.log(moment().format()); 
console.log(moment(dbDate).fromNow()); 

// DB stored time (Europe/London) 
// 2017-09-26 06:56:26 

// Current user time (timezone is Pacific Time/Los Angeles) 
// 2017-09-25T23:59:03-07:00 

// String output by fromNow() function, which should reflect the timezone difference but doesn't 
// in 7 hours 

我想fromNow()字符串來考慮時區差異,這應該是一個時間"ago"而不是在將來。

我可能錯過了一些相當明顯的圖書館,所以如果這很簡單,請事先道歉。

回答

0
// get the current time so we know which offset to take 
var now = moment.utc(); 
// get the zone offsets for this time, in minutes 
var NewYork_tz_offset = moment.tz.zone("America/New_York").offset(now); 
var MY_DATE = moment(dbDate); 
// calculate the difference in hours 
console.log((NewYork_tz_offset - MY_DATE)/60); 

這是否有助於您的事業?

+0

謝謝。我不會知道用戶的時區,所以我需要檢測它,但用下面的代碼不能按預期工作'var NewYork_tz_offset = moment.tz.zone(moment.tz.guess())。offset(現在);' - 任何想法? – tomphilps

+0

你的'dbDate'''格式是什麼? ISO? –

+0

它是UTC我相信(使用Magento) – tomphilps

0

你必須使用moment timezone,您可以分析dbDate指定使用moment.tz"Europe/London"時區:

moment.tz構造通吃相同的參數此刻構造,但使用的最後一個參數爲一個時區標識符。

然後你可以使用時刻difffromNow

這裏一個活生生的例子:

var dbDate = "2017-09-26 06:56:26"; 
 
var now = moment(); 
 
var momDbDate = moment.tz(dbDate, "Europe/London"); 
 
var pacificTime = moment("2017-09-25T23:59:03-07:00"); 
 
console.log(dbDate); 
 
console.log(moment().format()); 
 
console.log(momDbDate.fromNow()); 
 
console.log(momDbDate.diff(now, 'hours')); 
 
console.log(momDbDate.diff(pacificTime, 'hours'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.13/moment-timezone-with-data-2012-2022.min.js"></script>