javascript Date timezone issue
我需要一个具有日期和年份指定值的js Date对象。 我期待
有没有办法创建Date对象,
更新:
我需要将此Date对象用于另一个库(调用其
在JavaScript中将字符串解析为
关键是部件用连字符分隔,并且字符串中没有时区信息。 ECMAScript 5.1规范在§15.9.1.15中说:
... The value of an absent time zone offset is"Z".
这意味着,如果您没有指定偏移量,它将假设您的意思是UTC。
请注意,由于这与ISO-8601所说的相反,因此ECMAScript 2015(6.0)中的行为已经改变,在§20.3.1.16中说明:
... If the time zone offset is absent, the date-time is interpreted as a local time.
因此,当正确实现ES6的这一规定时,此格式的字符串值(以前将被解释为UTC)将被解释为本地时间。我在这里写了这篇博文。
解决方法很简单。用斜杠替换连字符:
1 2 | var s ="2000-01-01"; var dt = new Date(s.replace(/-/g, '/')); |
另一种可接受的解决方法是将日期时间而不是午夜时间分配给该日期。这将被解析为本地时间,并且足够远以避免任何DST冲突。
1 2 | var s ="2000-01-01"; var dt = new Date(s +"T12:00:00"); |
或者,考虑像moment.js这样的库更加明智。
1 2 | var s ="2000-01-01"; var dt = moment(s, 'YYYY-MM-DD').toDate(); |
您可以将新方法写入'Date.prototype',并使用它来获取将包括本地时区偏移量的日期。
1 2 3 4 5 6 7 8 9 10 11 12 13 | //return the date with depend of Local Time Zone Date.prototype.getUTCLocalDate = function () { var target = new Date(this.valueOf()); var offset = target.getTimezoneOffset(); var Y = target.getUTCFullYear(); var M = target.getUTCMonth(); var D = target.getUTCDate(); var h = target.getUTCHours(); var m = target.getUTCMinutes(); var s = target.getUTCSeconds(); return new Date(Date.UTC(Y, M, D, h, m + offset, s)); }; |