有人知道为什么Javascript Date对象会根据字符串的格式以及是否有避免它的方法来更改时区吗?
例如,在西海岸(Firefox由于某些原因使用PST,Chrome使用PDT),
new Date("08/30/2018") -> Date 2018-08-30T08:00:00.000Z
同时
new Date("2018-08-30") -> Date 2018-08-30T00:00:00.000Z
我花了一些时间调试此问题,如果可能的话,我宁愿不必添加额外的代码来更改时区或重新格式化输入字符串。
答案 0 :(得分:1)
我没有规格说明的答案,但我可以猜到。 @charlietfl处在正确的轨道上-08/30/2018
是美国(或其他“本地”)特定格式-国际上尚未认可,特别是大多数欧洲国家/地区将日期和月份的顺序颠倒了。因此,如果您将时间设置为本地格式,那么它将假定您不知道任何时间,只需将时区设置为浏览器中的系统时区即可。
如果使用国际认可的 规范化字符串,则它不会假设您输入时是什么时区,它只是将其设置为UTC。如果要指定服务器时区或用户的时区,则必须指定。
如果时区很重要,我建议您在初始化对象时指定时区(即使您想想要 UTC),因为这样总是可以减少歧义。特别是在这种情况下,您的浏览器使用的是太平洋时间,因为大概您是在西海岸。由于我在美国东海岸,所以我使用的是东部时间,因此第一种情况的时间戳有所不同-它使用的是当地时间 my 。对于我们俩来说,国际公认的日期格式都是UTC。
编辑:
我对猜测不满意。 According to the docs,Date()
使用Date.parse()
方法来解析字符串并识别出想要的日期-表面上它遵循规范here和here-看起来像只能在这里提供最小的帮助,而不会花费我愿意的时间。
Documentation for Date.parse()
表示它接受输入值,并返回自大纪元以来的毫秒数。
这是Date.parse()
中与您相关的部分:
鉴于日期字符串为“ 2014年3月7日”,parse()假定为本地时区,但是在给定ISO格式(例如“ 2014-03-07”)的情况下,它将采用UTC时区
答案 1 :(得分:1)
如果您在mozilla上查看Date的文档
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
注意:使用Date构造函数解析日期字符串(和 强烈建议不要使用Date.parse,它们等效) 浏览器的差异和不一致之处。支持RFC 2822格式 字符串仅按照惯例。对ISO 8601格式的支持在以下方面有所不同 仅日期的字符串(例如“ 1970-01-01”)被视为UTC,而不是 本地的。
我建议使用def tensor_slice(target_tensor, index_tensor):
indices = tf.stack([tf.range(tf.shape(index_tensor)[0]), index_tensor], 1)
return tf.gather_nd(target_tensor, indices)
组合使用https://momentjs.com/甚至https://moment.github.io/luxon/进行日期解析
datestring + format