如何获取新日期(2017,05,31).toISOString()的时区值?当日期传递给Date构造函数时,对于任何日期,它始终为000Z。但是对于新的Date()。toISOString(),它给出了时区值。
new Date(2017,05,31).toISOString() gives "2017-05-30T18:30:00.000Z"
和新的Date()。toISOString()给出" 2017-06-07T15:29:23.692Z"。如何获取过去日期的UTC格式的时区?
答案 0 :(得分:3)
如果您希望将时间默认为UTC的午夜,则可以使用Date.UTC(year, month, ...)
首先创建基于UTC的时间戳。
var utcMay31 = Date.UTC(2017, 4, 31); // note: 4 = May (0 = January)
然后,从该时间戳创建Date
。
new Date(utcMay31).toUTCString(); // "Wed, 31 May 2017 00:00:00 GMT"
但是,如果您想知道Date
对象中存储的时区,它实际上并没有。 Date
代表自1970年1月1日00:00:00.000 UTC以来经过的总时间“瞬间”。
new Date().getTime(); // 1496851...
Date
可以告诉您该用户在当时的分钟内与UTC的本地偏移量。
new Date().getTimezoneOffset(); // e.g. 0, -480, 300
否则,在创建日期字符串时,时区限制为两个选项,并且选择基于使用的方法 - 用户的本地时区或UTC。
new Date().toString(); // "now" in user's local time
new Date().toUTCString(); // "now" in UTC time
new Date().toISOString(); // "now" also in UTC time, alternate format
// etc.
答案 1 :(得分:2)
你很困惑ISO日期值没有显示"时区"相反,它们显示UTC时间。 Z代表祖鲁(UTC时间)。
2017-06-07T15:29:23的 692Z 强>
粗体部分不是时区。它是毫秒,全部时间是UTC。它在设定日期显示000Z的原因是因为你没有'设置毫秒。
如果要显示时区,请使用toUTCString()。但是它会显示GMT,即UTC /格林威治时间。要以日期格式显示本地时区,您可以使用date.toLocaleString(' en-US',{timeZoneName:' short'})例如将显示日期加上美国当地时区。或者您可以使用toString(),它将显示GMT偏移+长本地时区。
答案 2 :(得分:0)
在javascript中,解析,渲染和构建日期始终假定为本地。它将转换为时间戳,即自1-1-1970 00:00:00以来的毫秒数。 JSON.stringify将转换为UTC字符串,但旧版framworks使用本地日期。一定要小心这一点。
var myDate = new Date(); // this is now.
您可以使用myDate.getTimezoneOffset()
获取timezoneoffset(以分钟为单位),但这会为每个日期返回相同的偏移量(夏令时除外)
你不应该这样做:
var utcDate = new Date(+d+60000*d.getTimezoneOffset());
// +d convert the date to a timespan.
// getTimezoneOffset() is in minutes
// *60000 makes that in milliseconds, the scale timespans operate upon
日期有一些格式化日期的方法,但始终是本地日期或UTC日期。如果你想要不同的时区,你需要手动完成。
注意:Date.UTC(...)
函数返回时间戳。您有时会看到移动日期,因此它们的行为类似于UTC。但这会在以后引起问题。
var date = new Date(2000,1,1,12,0,0);
// DO NOT USE (breaks at start of daylight saving time)
// these are date/times that have the UTC-value,
// but Javascript treats them like local dates with this value.
utcDate1 = (+date-60000*d.getTimeZoneOffset()); // minus!!
utcDate2 = new Date(Date.UTC(2000,1,1,12,0,0));
// DO NOT USE (breaks at start of daylight saving time)
顺便说一句 边缘,Chrome和Firefox在控制台中的显示日期不同:Edge和Firefox始终显示本地日期,Chrome显示UTC。此外,如果您更改时区,Edge将会搞砸。