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

时间:2015-11-18 09:00:57

标签: node.js time timezone momentjs

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

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

抱歉我的模棱两可的描述和糟糕的英语。

我有两个字符串:start_time和end_time。并且clint上传了另外两个字符串:timezone_str,utc_time_str。

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

e.g

  • start_time:2015-11-10 00:00:00
  • end_time:2015-11-11 00:00:00
  • utc_time_str:2015-11-10 02:00:00Z
  • timezone_str: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

2 个答案:

答案 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