Javascript MomentJS.date()问题

Javascript MomentJS.date()问题,javascript,momentjs,Javascript,Momentjs,谁能解释一下为什么时刻(“2013-04-22 00:00:00+07:00”).date()返回21 例如moment(“2013-04-22 00:00:00+02:00”).date()返回22 我希望在不考虑用于构建矩对象的字符串中的任何时区信息的情况下获取日期,即在这个特定示例中始终为22。我想我已经找到了答案:矩(“iso8601_字符串”)将该字符串解析/转换为本地时间。在我的例子中,我处于UTC+2时区,因此解析包含“+02:00”(或“+01:00”)的字符串,然后调用.dat

谁能解释一下为什么
时刻(“2013-04-22 00:00:00+07:00”).date()返回
21

例如
moment(“2013-04-22 00:00:00+02:00”).date()
返回
22


我希望在不考虑用于构建矩对象的字符串中的任何时区信息的情况下获取日期,即在这个特定示例中始终为22。

我想我已经找到了答案:
矩(“iso8601_字符串”)
将该字符串解析/转换为本地时间。在我的例子中,我处于UTC+2时区,因此解析包含
“+02:00”
(或
“+01:00”
)的字符串,然后调用
.date()
返回22,因为存储在矩对象中的时间与我的本地时间匹配

但是,当使用例如
“+07:00”
解析字符串时,存储在矩对象中的时间将是我的本地时间,在这种情况下,日期实际上与前一天不同

我认为我最初的要求是复杂的,基于一个错误的假设。我的用例是,我从某个UI小部件获得的日期时间始终是日期+时间,但我只需要日期。编写一个单元测试来解析包含
“+07:00”
的字符串会导致日期“不正确”。然而,这是一个错误的假设,因为(至少在我的用例中)UI小部件的日期时间总是在本地时间,所以代码永远不会解析包含
“+07:00”
的字符串

我不确定我最初所说的用例是否存在于现实世界中:

  • 您将得到一个字符串,其中包含另一时区中的日期
  • 你需要把日期去掉,但要在日期的时区内(为什么?)

我想通常情况下,无论何时从某个遥远的地方获取日期,约定总是获取UTC,这样参考点就很清楚,您可以在本地进一步转换它。因此,当你在一个随机时区中得到一个日期,并且需要它的日期,在那个时区中,这种情况可能并不常见。不过,作为一个学术问题,我不知道在这种情况下我如何才能从中提取日期:)

您使用的是旧版本吗?我刚刚测试了这两个字符串,两个字符串的返回值都是21。我想我已经找到了可能的重复项,chazsolo请参见下面的答案,为什么在您的情况下这两个字符串都返回21。使用
parseZone
创建一个时刻对象,该对象保留在给定的时区中,并且不会转换为您的本地时间:
moment.parseZone(“2013-04-22 00:00:00+07:00”)。获取(“日期”)
好的,谢谢!在我的情况下不会将其用作冗余,但可能对someobody有用。