如何解决如何从javascript中的字符串获取时区偏移量?
我有一个字符串 2021-04-07T13:51:39.664+11:00
,我用它来创建一个 Date
对象:d = new Date('2021-04-07T13:51:39.664+03:00')
。
之后,d
是表示日期时间的实例。现在我想从 d
获取时区偏移量,但 d.getTimezoneOffset()
总是返回本地时区偏移量,在我的情况下为 -600
。如何从字符串中获取时区偏移量?当我构建 date
实例时它会丢失吗?我必须解析字符串才能得到它吗?
如果我有一个 date
对象,我如何生成一个以偏移量结尾的字符串:2021-04-07T13:51:39.664+03:00
? toISOString()
仅生成 UTC 时间。
我知道 moment
是一个很好的日期库,但我不想添加这个依赖项,因为它太大了。
解决方法
function dateZ(dateString) {
var _date = dateString.substring(0,23);
var _offset = dateString.substring(23);
var _dateValue = new Date(dateString);
function offset(value) {
if (value) {
_offset = value;
_dateValue = new Date(toString());
}
return _offset;
}
function date(value) {
if (value) {
_date = value;
_dateValue = new Date(toString());
}
return _dateValue;
}
function toString() {
return `${_date}${_offset}`
}
return { offset,date,toString };
}
var d = dateZ('2021-04-07T13:51:39.664+03:00');
console.log(d.date(),d.offset(),d.toString());
d.offset('+05:30');
console.log(d.date(),d.toString());
这可能不是最好的方法,但如果您控制应用程序环境,它是可移植的并且非常有用。
friendlyDate = function( x ){
var label = "Day Month Date Year Time Offset".split(" "),d = x ? new Date(x) : new Date(),s = ( d + "" ) .split( / / );
s.length = label.length;
for( var x in s )s[ label[ x ] ] = s[ x ];
s.length = 0;
return s
}
/**/
dte = friendlyDate();
for(var x in dte)console.log(x + ": "+ dte[x]);
How to initialize a JavaScript Date to a particular time zone
Date 对象本身中没有存储时区或字符串格式。
似乎是字符串解析或库(如果您感兴趣,还有比 moment 更轻量的库)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。