所以,我的月份的第一天为2019-04-01T00:00:00.000Z
当我使用moment(date).month()
时,它返回2,而不是3。
因此,我收到的是三月,而不是四月。
这是什么问题,为什么我从该日期起收到上个月?也许是TimeZone中的问题?因为我的TimeZone是GMT-4
,所以,也许这有问题吗?
我应该使用UTC
或ISO
字符串代替日期吗?
答案 0 :(得分:1)
就像您提到的那样,您的时区为GMT-4
。您提供的日期以UTC为单位。末尾的“ Z”代表祖鲁时间,与UTC相同。
momentjs
会将其转换为当地时间。
如何处理这一切取决于您需要的日期。
如果这是您之前保存在服务器上某个日期的日期,则在保存时将正确的时区添加到该日期可能很重要。
如果让服务器创建这些日期,请务必小心,因为该服务器可能在与客户端不同的时区中运行。
如果您在JS中创建new Date()
,它将返回一个日期对象以及您当地时间的当前时间。如果这是在不同时区或UTC(例如Docker容器)上运行的服务器上发生的,它将在该时区中创建一个日期。
解决此问题的最佳方法是考虑您的确切用例。 有很多关于日期处理的文章,这并不容易。 如果您有时间,此播客有助于解释日期的工作原理,并总体上帮助您更好地了解日期: Coding Blocks - Why Date-ing Is Hard