Javascript 两个GMT日期之间的时间差

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

我试图用矩来计算两个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-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

  • 你还说“我有一些格林尼治标准时间(-05:00)”-这没有任何意义。格林尼治时间是+00:00。GMT-0500表示“落后GMT 5小时”。因此,您不再有“GMT日期”

  • 请注意,JavaScript
    Date
    对象只能使用代码运行所在的时区。您不能在任何其他时区运行它

  • 虽然Felix在如何使用
    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

  • 你还说“我有一些格林尼治标准时间(-05:00)”-这没有任何意义。格林尼治时间是+00:00。GMT-0500表示“落后GMT 5小时”。因此,您不再有“GMT日期”

  • 请注意,JavaScript
    Date
    对象只能使用代码运行所在的时区。您不能在任何其他时区运行它

  • 虽然Felix在如何使用
    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
      构造函数