如何从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:00toISOString()生成 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]);
ps:您可能需要重新调整\重新排列某些目标浏览器的标签。 [并非所有浏览器供应商\版本日期字符串表示都返回相等;)]

,

How to initialize a JavaScript Date to a particular time zone

Date 对象本身中没有存储时区或字符串格式。

似乎是字符串解析或库(如果您感兴趣,还有比 moment 更轻量的库)。