我最糟糕的噩梦是日期对象,所以我创建了一个小提琴,看看它是如何工作的,并尝试使用以下格式找到日期字符串的解决方案2015-10-05T11:49:13.587Z
但要注意当前的时区。
基本上,我希望能够写new Date()
(或类似)并获取2015-10-05T09:49:13.587Z
而不是2015-10-05T11:49:13.587Z
。
似乎显示正确日期/时间的唯一方法是:
moment().format()
new Date().toLocaleString()
moment().toLocaleString()
moment().format().toLocaleString()
但是他们都没有返回像我想要的那样的日期对象。那么处理它的正确方法是什么?
请检查我的测试: http://codepen.io/Frondor/pen/PPmYpv
答案 0 :(得分:2)
基本上,我希望能够写
new Date()
(或类似)并获取2015-10-05T09:49:13.587Z
而不是2015-10-05T11:49:13.587Z
。
你要求的价值是提前两个小时。以这种方式转换它是无效的。
我认为你混淆了两件截然不同的事情:
UTC不是格式。这是一个计时系统。当我们说“在UTC中”时,我们的意思是时间值以世界时间表示 - 这在全球范围内是相同的,并且与GMT(在不考虑夏令时的英格兰格林威治时间)大致相同。如果您当地时间比UTC晚两个小时,则UTC比您当地时间早两个小时。
ISO-8601格式是日期和时间的字符串表示。有几种形式,您表达的形式是时间戳的扩展格式。换句话说,它代表事件发生的实际时刻,包括日期,时间和与UTC的关系。
在这种格式中,Z
具体表示“此处显示的值已经是UTC”。它与使用+00:00
大致相同。
因此,如果UTC中的值为ISO8601字符串为2015-10-05T11:49:13.587Z
,则相应的本地值(假设您所说的UTC-2)为2015-10-05T09:49:13.587-02:00
。这仍然是ISO8601格式,但不再是UTC格式。
获得此功能的最简单方法是使用moment().format()
来使用moment.js。
答案 1 :(得分:1)
此格式 - 2015-10-05T11:49:13.587Z
- 是Coordinated Universal Time (UTC)或ISO 8601格式的日期和时间的标准表示之一。
时区不会以这种格式显示,因为格式本身的目的是(如维基百科文章中所述):
日期和时间的表示是一项国际标准 涵盖日期和时间相关数据的交换。
但是我们绝对可以用该格式显示日期以及当前时区的偏移量,但它本身就违背了“标准”格式的目的。
答案 2 :(得分:1)
您要求它产生不准确的时间。您正在寻找的格式意味着UTC时间。我建议你检查一下你的要求,因为那里可能存在缺陷。
但如果这正是你想要的,你会说:
moment().format("YYYY-MM-DDThh:mm:ss.SSSS") + 'Z'