Javascript 两个GMT日期之间的时间差
我试图用矩来计算两个GMT日期之间的天数差 但是我找不到它 我在IST(+05:30),我有一些格林尼治标准时间(-05:00)以db表示 我试着使用下面的命令Javascript 两个GMT日期之间的时间差,javascript,date,momentjs,Javascript,Date,Momentjs,我试图用矩来计算两个GMT日期之间的天数差 但是我找不到它 我在IST(+05:30),我有一些格林尼治标准时间(-05:00)以db表示 我试着使用下面的命令 temp2.diff(temp1,“天”) 下面是在console中尝试的所有命令的屏幕截图 在那里,我们可以清楚地看到日期不同,但仍然显示差异为0 下面是我如何初始化'America/New\u York' var temp1 = moment.tz(new Date('Mon Jan 25 2016 22:00:00 GMT-06
temp2.diff(temp1,“天”)
下面是在console中尝试的所有命令的屏幕截图
在那里,我们可以清楚地看到日期不同,但仍然显示差异为0
下面是我如何初始化'America/New\u York'
var temp1 = moment.tz(new Date('Mon Jan 25 2016 22:00:00 GMT-0600'), 'America/New_York');
var temp2 = moment.tz(new Date('Tue Jan 26 2016 00:00:00 GMT-0600'), 'America/New_York');
感谢您的帮助。好吧,两个日期相差不到24小时,所以这是正确的。报告说: 默认情况下,
moment#diff
将返回向下舍入的数字。如果需要浮点数,请将true作为第三个参数传递
如果您根本不关心小时数,请在进行比较之前将其设置为
0
> temp2.hours(0).diff(temp1.hours(0), "days")
1
嗯,这些日期之间的差异不到24小时,所以这是正确的。报告说: 默认情况下,
moment#diff
将返回向下舍入的数字。如果需要浮点数,请将true作为第三个参数传递
如果您根本不关心小时数,请在进行比较之前将其设置为
0
> temp2.hours(0).diff(temp1.hours(0), "days")
1
有几件事:
Date
构造函数从字符串值加载这些值。如果您真的在数据库中存储字符串,特别是以这种特定格式存储,那么您的问题比您所问的问题要大得多!请准确地向我们展示您是如何从数据库中加载值的Date
对象进行解析,尤其是当您已经在使用矩时,矩本身具有更好的解析例程美国/纽约
中表示了这些值,但随后显示了偏移量-0600
。在那个时区从来没有用过。显示的值的偏移量为-0500
Date
对象只能使用代码运行所在的时区。您不能在任何其他时区运行它diff
函数显示小数方面是正确的,但您应该意识到diff
给出了您所询问的两个时刻之间的实际经过时间。但是,您似乎想知道在指定时区内,时间间隔为两天的日历天数的总数。为此,您需要忽略时间部分。使用startOf('day')
是一种简单的方法。考虑:
var a = moment.parseZone("2016-01-25T23:00:00-05:00");
var b = moment.parseZone("2016-01-26T01:00:00-05:00");
b.diff(a, 'days', true) // 0.08333333333333333 (not what you want)
b.startOf('day').diff(a.startOf('day'), 'days') // 1 (that's better!)
moment(b).startOf('day').diff(moment(a).startOf('day'),'days') // 1 (best approach)
请注意此代码中的几点:
- 最后一行中的代码是最好的方法,因为它只保留
和a
的原始值。否则,它们将被修改。(时刻是可变的。)b
- 您似乎已经拥有正确的本地时间和偏移量,因此无需使用矩时区的
功能。您只需使用tz
。当然,如果这只是您的示例的一个副作用,那么您仍然可以使用矩时区,但我强烈建议您还是不要使用parseZone
构造函数Date
Date
构造函数从字符串值加载这些值。如果您真的在数据库中存储字符串,特别是以这种特定格式存储,那么您的问题比您所问的问题要大得多!请准确地向我们展示您是如何从数据库中加载值的Date
对象进行解析,尤其是当您已经在使用矩时,矩本身具有更好的解析例程美国/纽约
中表示了这些值,但随后显示了偏移量-0600
。在那个时区从来没有用过。显示的值的偏移量为-0500
Date
对象只能使用代码运行所在的时区。您不能在任何其他时区运行它diff
函数显示小数方面是正确的,但您应该意识到diff
给出了您所询问的两个时刻之间的实际经过时间。但是,您似乎想知道在指定时区内,时间间隔为两天的日历天数的总数。为此,您需要忽略时间部分。使用startOf('day')
是一种简单的方法。考虑:
var a = moment.parseZone("2016-01-25T23:00:00-05:00");
var b = moment.parseZone("2016-01-26T01:00:00-05:00");
b.diff(a, 'days', true) // 0.08333333333333333 (not what you want)
b.startOf('day').diff(a.startOf('day'), 'days') // 1 (that's better!)
moment(b).startOf('day').diff(moment(a).startOf('day'),'days') // 1 (best approach)
请注意此代码中的几点:
- 最后一行中的代码是最好的方法,因为它只保留
和a
的原始值。否则,它们将被修改。(时刻是可变的。)b
- 您似乎已经拥有正确的本地时间和偏移量,因此无需使用矩时区的
功能。您只需使用tz
。当然,如果这只是您的示例的一个副作用,那么您仍然可以使用矩时区,但我强烈建议您还是不要使用parseZone
构造函数Date