这是两个日期,2015-11-10 09:00:00+08:00
和2015-11-10 01:00:00+08:00
在中国同一天。但是它们在UTC中是不同的一天。
那么......如何在node.js中的不同时区确定两个UTC日期是同一天?
抱歉我的模棱两可的描述和糟糕的英语。
我有两个字符串:start_time和end_time。并且clint上传了另外两个字符串:timezone_str,utc_time_str。
我想确定客户端时间是在开始时间和结束时间之间。
e.g
2015-11-10 00:00:00
2015-11-11 00:00:00
2015-11-10 02:00:00Z
America/New_York
除了client_time.isBetween(start_time, end_time) == false
。
感谢@Matt Johnson的回答,moment-timezone可以解决我的问题。
client_time = moment(utc_time_str).tz(timezone_str);
start = moment.tz(start_time, timezone_str);
end = moment.tz(end, timezone_str);
client_time.isBetween(start, end) === false
答案 0 :(得分:1)
最可靠的方法是使用parseZone
中的moment.js函数来保留提供的偏移量。然后使用isSame
函数和'day'
参数,该参数测试相同的年,月和日。
var m1 = moment.parseZone("2015-11-10 09:00:00+08:00");
var m2 = moment.parseZone("2015-11-10 01:00:00+08:00");
if (m1.isSame(m2, 'day')) {
// ...
}
使用这种方法,给出的偏移量无关紧要,运行代码的计算机上的时区也不重要。它只是比较提供的两个日期。
答案 1 :(得分:0)
像这样计算当地“小时”
var d1 = new Date('2015-11-10 09:00:00+08:00')
var d2 = new Date('2015-11-10 01:00:00+08:00')
var h1 = d1.getHours() - d1.getTimezoneOffset() / 60
var h2 = d2.getHours() - d2.getTimezoneOffset() / 60
var date1 = d1.getDate() + (h1 >= 24? 1: 0)
var date2 = d2.getDate() + (h2 >= 24? 1: 0)
只比较date1和date2