时刻JS - 比较当地时间的正确方法

时间:2017-09-26 07:14:17

标签: javascript jquery momentjs

我正在尝试使用moment.js将数据库中存储的日期(设置为Europe/London时区)与当前用户时间进行比较,并考虑其时区。

我从数据库返回一个日期字符串,并希望使用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"而不是将来。

我可能遗漏了一些非常明显的图书馆,如果这很简单,请提前道歉。

2 个答案:

答案 0 :(得分: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);

这对你的事业有帮助吗?

答案 1 :(得分:0)

您必须使用moment timezone,您可以使用moment.tz解析指定use时区的dbDate

  

"Europe/London"构造函数采用与构造函数相同的所有参数,但使用最后一个参数作为时区标识符。

然后您可以使用difffromNow

这是一个实例:

moment.tz
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'));