在javascript中,如何获取新日期(2017,05,31)的UTC格式的时区值?

在javascript中,如何获取新日期(2017,05,31)的UTC格式的时区值?,javascript,date,datetime,Javascript,Date,Datetime,如何获取新日期(2017,05,31)的时区值。toISOString()?当日期传递给日期构造函数时,对于任何日期,它总是以000Z的形式出现。但是对于new Date().toISOString(),它给出了时区值 new Date(2017,05,31).toISOString() gives "2017-05-30T18:30:00.000Z" 而new Date().toISOString()给出了“2017-06-07T15:29:23.692Z”。如何为过去的日期获取UTC格式的

如何获取新日期(2017,05,31)的时区值。toISOString()?当日期传递给日期构造函数时,对于任何日期,它总是以000Z的形式出现。但是对于new Date().toISOString(),它给出了时区值

new Date(2017,05,31).toISOString() gives "2017-05-30T18:30:00.000Z"

而new Date().toISOString()给出了“2017-06-07T15:29:23.692Z”。如何为过去的日期获取UTC格式的时区?

如果希望将时间默认为UTC格式的午夜,可以使用先创建UTC格式的时间戳

var utcMay31 = Date.UTC(2017, 4, 31); // note: 4 = May (0 = January)
然后,根据该时间戳创建日期

new Date(utcMay31).toUTCString(); // "Wed, 31 May 2017 00:00:00 GMT"

但是,如果您想知道
Date
对象中存储的时区,它实际上没有<代码>日期s表示时间上的“瞬间”,即自1970年1月1日00:00:00.000 UTC以来经过的总毫秒数

new Date().getTime(); // 1496851...
日期
可以告诉您用户当时与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.

如果希望时间默认为UTC的午夜,可以使用首先创建基于UTC的时间戳

var utcMay31 = Date.UTC(2017, 4, 31); // note: 4 = May (0 = January)
然后,根据该时间戳创建日期

new Date(utcMay31).toUTCString(); // "Wed, 31 May 2017 00:00:00 GMT"

但是,如果您想知道
Date
对象中存储的时区,它实际上没有<代码>日期s表示时间上的“瞬间”,即自1970年1月1日00:00:00.000 UTC以来经过的总毫秒数

new Date().getTime(); // 1496851...
日期
可以告诉您用户当时与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.

在javascript中,解析、呈现和构造日期总是假定为本地日期。它将转换为时间戳,即自1970年1月1日00:00:00起的毫秒数。stringify将转换为UTC字符串,但传统framworks使用本地日期。一定要小心这一点

var myDate = new Date(); // this is now.
您可以使用
myDate.getTimezoneOffset()
获取时区偏移量(以分钟为单位),但这将为每个日期返回相同的偏移量(夏令时除外)

你不应该这样做:

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
Date有几种格式化日期的方法,但始终为本地日期或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)
顺便说一句
Edge、Chrome和Firefox在控制台中显示日期的方式不同:Edge和Firefox始终显示本地日期,Chrome显示UTC。此外,如果您更改时区,Edge将出错。

在javascript中,解析、呈现和构造日期将始终假定为本地日期。它将转换为时间戳,即自1970年1月1日00:00:00起的毫秒数。stringify将转换为UTC字符串,但传统framworks使用本地日期。一定要小心这一点

var myDate = new Date(); // this is now.
您可以使用
myDate.getTimezoneOffset()
获取时区偏移量(以分钟为单位),但这将为每个日期返回相同的偏移量(夏令时除外)

你不应该这样做:

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
Date有几种格式化日期的方法,但始终为本地日期或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)
顺便说一句
Edge、Chrome和Firefox在控制台中显示日期的方式不同:Edge和Firefox始终显示本地日期,Chrome显示UTC。此外,如果您更改时区,Edge将出错。

您感到困惑的是,ISO日期值不显示“时区”,而是显示UTC时间。Z代表祖鲁(UTC时间)

2017-06-07T15:29:23.692Z

粗体部分不是时区。它是毫秒,完整时间是UTC。它在设定日期中显示000Z的原因是您没有设定毫秒


如果要显示时区,请使用ToutString()。但是,它将显示UTC/格林威治时间的GMT。要以日期格式显示本地时区,可以使用date.ToLocalString('en-US',{timeZoneName:'short'})例如,将显示日期加上本地美国时区。或者您可以使用toString(),它将显示GMT偏移量+较长的本地时区。

您会感到困惑,ISO日期值不显示“时区”,而是显示UTC时间。Z代表祖鲁(UTC时间)

2017-06-07T15:29:23.692Z

粗体部分不是时区。它是毫秒,完整时间是UTC。它在设定日期中显示000Z的原因是您没有设定毫秒


如果要显示时区,请使用ToutString()。但是,它将显示UTC/格林威治时间的GMT。要以日期格式显示本地时区,可以使用date.ToLocalString('en-US',{timeZoneName:'short'})例如,将显示日期加上本地美国时区。或者您可以使用toString(),它将显示GMT偏移量+长的本地时区。

如果您有选择,为什么不使用momentjs?我想使用纯JavaScript。这里的其他人给出的建议可能适用于也可能不适用于您遇到的确切问题,因为您没有很好地定义问题。请给出一个您期望输出的确切示例。此外,要认识到UTC不是一种“格式”。我想你是指ISO-8601格式?定义为始终返回UTC,因此它将始终使用偏移量+00:00(即Z)。getTimezoneOffset以分钟为单位返回任何日期的主机时区偏移量,但请注意,该符号与ISO 8601使用的符号相反,因此-04:00为+240。+05:30为-330。
var isoDate=新日期(