日期2019-04-01T00:00:00.000Z给我上个月(3月,不是4月)

时间:2019-04-06 06:03:36

标签: javascript date momentjs

所以,我的月份的第一天为2019-04-01T00:00:00.000Z

当我使用moment(date).month()时,它返回2,而不是3。 因此,我收到的是三月,而不是四月。

这是什么问题,为什么我从该日期起收到上个月?也许是TimeZone中的问题?因为我的TimeZone是GMT-4,所以,也许这有问题吗?

我应该使用UTCISO字符串代替日期吗?

1 个答案:

答案 0 :(得分:1)

就像您提到的那样,您的时区为GMT-4。您提供的日期以UTC为单位。末尾的“ Z”代表祖鲁时间,与UTC相同。 momentjs会将其转换为当地时间。

如何处理这一切取决于您需要的日期。 如果这是您之前保存在服务器上某个日期的日期,则在保存时将正确的时区添加到该日期可能很重要。 如果让服务器创建这些日期,请务必小心,因为该服务器可能在与客户端不同的时区中运行。 如果您在JS中创建new Date(),它将返回一个日期对象以及您当地时间的当前时间。如果这是在不同时区或UTC(例如Docker容器)上运行的服务器上发生的,它将在该时区中创建一个日期。

解决此问题的最佳方法是考虑您的确切用例。 有很多关于日期处理的文章,这并不容易。 如果您有时间,此播客有助于解释日期的工作原理,并总体上帮助您更好地了解日期: Coding Blocks - Why Date-ing Is Hard