我正在尝试使用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"
而不是将来。
我可能遗漏了一些非常明显的图书馆,如果这很简单,请提前道歉。
答案 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"
构造函数采用与构造函数相同的所有参数,但使用最后一个参数作为时区标识符。
这是一个实例:
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'));