如何在nodejs中确定两个日期是当地时间的同一天?

How to determine two date is same day at local time in nodejs?

这里有两个日期,2015-11-10 09:00:00+08:002015-11-10 01:00:00+08:00在中国是同一天。但它们在 UTC 中是不同的一天。

所以...如何确定 node.js 中不同时区的两个 UTC 日期是同一天?


对不起,我的描述含糊不清,英语不好。

我有两个字符串:start_time 和 end_time。克林特上传了另外两个字符串:timezone_str、utc_time_str.

我想确定客户端时间在开始和结束时间之间。

例如

除了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

像这样计算局部"hours"

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)

只比较日期 1 和日期 2

最可靠的方法是使用带有 'day' 参数的 parseZone function in moment.js to retain the provided offset. Then use the isSame 函数,它测试相同的年月日。

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')) {
   // ...
}    

使用这种方法,给出的偏移量无关紧要,代码为 运行 的计算机上的时区也无关紧要。它只是比较提供的两个日期。