2015-05-19 75 views
0

請問誰能解釋一下爲什麼moment("2013-04-22 00:00:00+07:00").date()返回21MomentJS .date()問題

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

我希望獲得日期而不考慮時間對象所在的字符串中的任何時區信息,即在此特定示例中始終爲22。

+0

您是否正在使用舊版本?我只測試了這兩個字符串,兩者的回報都是21。 – chazsolo

+0

[Moment.js]可能的重複日期](http://stackoverflow.com/questions/28612525/moment-js-round-dates-up) – janfoeh

+0

我想我想通了,chazsolo看到我的答案爲什麼這個在你的情況下返回21。 –

回答

0

我想我想通了:moment("iso8601_string")解析/將該字符串轉換爲本地時間。在我的情況下,我處於UTC + 2時區,因此解析包含"+02:00"(或"+01:00")的字符串,然後調用.date()會返回22,因爲存儲在時刻對象中的時間與我的本地時間相匹配。

但是,當用例如"+07:00",存儲在當前對象中的時間將是我當地的時間,在這種情況下,日期實際上會在前一天不同。

我想我的原始要求也是錯綜複雜的,並且基於不正確的假設。我的用例是我從某個UI小部件獲取日期時間始終爲日期+時間,但我只需要日期。編寫一個單元測試,解析包含"+07:00"的字符串導致日期「不正確」。然而這是一個不正確的假設,因爲(至少在我的用例中)UI小部件的日期時間總是在當地時間,所以代碼永遠不會解析包含"+07:00"的字符串。

我不知道,當我最初說用例在現實世界中確實存在:

  • 你得到一個包含日期在另一個時區的字符串
  • 你需要採取的日期出來,但在該日期的時區(爲什麼?)

我想一般只要從遠程某處公約得到一個日期是始終得到UTC,這樣的參考點是明確的,你可以在本地進一步轉換。因此,當您在隨機時區中獲得日期並且需要日期時間的情況下,在該時區中,情況可能不常見。儘管如此,作爲一個學術問題,我不知道如何在這種情況下能夠得到它的日期:)

+0

使用'parseZone'創建一個矩形對象,它保留在給定的時區中,並且不會轉換爲當地時間:'moment.parseZone(「2013-04-22 00:00:00 + 07:00」)。 get(「date」)' – janfoeh

+0

好的,謝謝!在我的情況下不會將它用作冗餘,但可能對某些人有用。 –