qaz*_*qaz 6 javascript utc momentjs
I want to get utc date using moment or any other possibilities. utcString = moment.utc(someDate)).format()
is giving utc string not utc date. I am not able to perform operations like utcString.getDate()
, etc using this. Please help me in providing with utc date object.
moment.utc(new Date()).toDate()
正在将日期再次转换为我的当地时间。
例如:我希望将 utc 格式的字符串"2019-10-31T00:00:00.000Z"
转换为 utc 日期并执行getDate(), getFullYear()
可以使用 Date() 对象执行的操作(如等)
从该文件MDN上的Date
对象:
创建一个 JavaScript
Date
实例,以独立于平台的格式表示单个时刻。Date
对象包含Number
表示自 UTC 1970 年 1 月 1 日以来的毫秒数。
换句话说,Date
对象只是一个包含单个值的抽象,并且该值始终以 UTC 表示。如果您想查看该值,请调用.valueOf()
或.getTime()
,或将其强制为数字(例如:+d
)。
Date
对象的许多特征可以以不同的方式公开该值,例如以标准化的字符串格式、人类可读的字符串格式或表示部分组件值的各种其他数字(即年、月、日、小时、分、秒、毫秒)。其中的一些功能使用UTC确定其输出时(如.toISOString()
,.getUTCFullYear()
等),以及其他确定它们的输出时所使用的计算机的本地时区(如.toString()
,.getFullYear()
等)。
很容易对此感到困惑,尤其是在console.log
直接调用Date
对象时。需要记住的是,控制台日志记录功能是特定于实现的。您可能会看到一个人类可读的字符串,它看起来像本地时间.toString()
,就像您调用.toISOString()
. 确实,实现可以在日志记录方面做任何想做的事情。它可以打印出一只发出嘶嘶声的猫。
更令人困惑的是,Date
构造函数根据本地时间获取其数字参数,因此人们可能认为它new Date(2019,8,5,0,0,0)
是Date
本地时间的对象,但实际上它在构造过程中转换为 UTC 并记录相应的时间戳。可以通过new Date(Date.UTC(2019,8,5,0,0,0))
将这些值解释为 UTC,但无论哪种方式,Date
对象本身都是 UTC。
关键的一点是,不要以为因为你看到的本地时间,该Date
物体是在本地时间。不是。它从来都不是。因此,在不同的时区请求它也是不可能的。在 UTC 中要求它是你已经拥有的。
我要像UTC格式的字符串
"2019-10-31T00:00:00.000Z"
即可转换为UTC日期和执行操作(如getDate()
,getFullYear()
等)
你不会打电话getDate
或getFullYear
。这些函数在内部询问计算机的本地时区并将其应用于时间戳,然后再确定其结果。相反,您会调用getUTCDate
or getUTCFullYear
,它不适用本地时区。
...实际上我正在使用react-date-picker。... (来自您的评论)
那里有很多日期选择器。如果您没有从正在使用的功能中获得功能,请尝试另一个。
在时区方面,最好的人会做两件事之一:
他们可能会为选择器的“模式”提供设置,通常是本地或 UTC,或者可能是特定的 UTC 偏移量或时区 ID。这将允许您预先确定您希望选择器在其输入和输出方面的行为方式。
他们可能只是将输入和输出作为 提供String
,而不是作为Date
对象。这将允许选择器以中立的方式运行,然后您可以以您喜欢的任何方式解释用户的选择。(顺便说一句,HTML5 就是<input type="date">
这样工作的。)
不幸的是,有很多日期选择器不能以这种方式工作,并且假设您只是想要一个Date
基于本地时间创建的对象。为了解决这个问题,你需要撒一点谎。
例如,假设我2019-09-05
从假定我的本地时区的日期选择器中进行选择。它在内部进行new Date(2019, 8, 5)
,或者可能确实如此new Date("2019-09-05T00:00:00.000")
。在Date
对象记录相应的时间戳值之前,任何一种形式都将被解释为本地时间。但我实际上并不想要——我想让用户选择一个 UTC 日期。所以我添加了这段代码来调整d
从选择器返回的对象 ( ):
d.setTime(d.getTime() - (d.getTimezoneOffset() * 60 * 1000));
Run Code Online (Sandbox Code Playgroud)
这种技术称为纪元转移,因为它将时间戳的基础移离(或朝向)1970-01-01T00:00:00.000Z
Unix 纪元。在这种情况下,它Date
是错误创建的原始对象(由选择器创建的对象),因此上述将其移回标准 Unix 时代。
请记住,这项技术就是让您的用户选择一个基于 UTC 的值,然后将其恢复为常规Date
对象。它不用于让您的用户选择本地值并将其转换为 UTC。对于您必须使用专为目的(的功能getUTCFullYear
,getISOString
等等)。
let d = moment();
let d_utc = moment.utc();
let full_year = d_utc.format('YYYY');
let month = d_utc.format('MM')
console.log(d);
console.log(d_utc);
console.log(d.format());
console.log(d_utc.format());
console.log(full_year);
console.log(month);
Run Code Online (Sandbox Code Playgroud)
<script src="https://momentjs.com/downloads/moment.js"></script>
Run Code Online (Sandbox Code Playgroud)
您可以根据需要设置日期格式(当地时间或 UTC)并将结果放入变量中。
归档时间: |
|
查看次数: |
7083 次 |
最近记录: |