javascript - 如何从 Javascript 中的字符串获取时区偏移量

标签 javascript timezone

我收到一个带有偏移量的字符串格式的日期,但 javascript 正在将其转换为本地设备时间

var d = new Date("2012-11-13T11:34:58-05:00");
debug.log(d);

返回 2012 年 11 月 13 日星期二 17:34:58 GMT+0100 (CET)

var offset = d.getTimezoneOffset();
debug.log(offset);

返回 -60(我的设备是 utc +1h)

我只想有偏移量的时间,或者字符串中提到的时区偏移量(示例中的 -5h)

最佳答案

我找到的唯一解决方案是通过解析字符串来创建自定义时间对象

//ex: 2012-11-13T10:56:58-05:00
function CustomDate(timeString){

    var completeDate = timeString.split("T")[0];
    var timeAndOffset = timeString.split("T")[1];
    //date
    this.year = completeDate.split("-")[0];
    this.month = completeDate.split("-")[1];
    this.day = completeDate.split("-")[2];

    this.date = this.year + "/" + this.month + "/"+this.day;

    //negative time offset
    if (timeAndOffset.search("-") != -1){
        var completeOffset = timeAndOffset.split("-")[1];
        this.offset = parseInt(completeOffset.split(":")[0]) * -1;

        var originalTime = timeAndOffset.split("-")[0];
        this.hours = parseInt(originalTime.split(":")[0]);
        this.minutes = parseInt(originalTime.split(":")[1]);
        this.seconds = parseInt(originalTime.split(":")[2]);

        this.time = this.hours + ":" + this.minutes + ":"+this.seconds;

    }
    ///positive time offset
    else if (timeAndOffset.search(/\+/) != -1){

        var completeOffset = timeAndOffset.split("+")[1];
        this.offset = parseInt(completeOffset.split(":")[0]);

        var originalTime = timeAndOffset.split("+")[0];
        this.hours = parseInt( originalTime.split(":")[0]);
        this.minutes = parseInt(originalTime.split(":")[1]);
        this.seconds = parseInt(originalTime.split(":")[2]);

        this.time = this.hours + ":" + this.minutes + ":"+this.seconds;
    }
    //no time offset declared
    else{
        this.hours = parseInt(timeAndOffset.split(":")[0]);
        this.minutes = parseInt(timeAndOffset.split(":")[1]);
        this.seconds = parseInt(timeAndOffset.split(":")[2]);
        this.offset = 0;

        this.time = this.hours + ":" + this.minutes + ":"+this.seconds;
    }
}

例如,如果我想在指定的时区偏移量中显示接收时间 2012-11-13T11:34:58-05:00 是什么:

var aDate = new CustomDate("2012-11-13T11:34:58-05:00");
alert("date: " + aDate.date +" time: "+aDate.time+" offset: "+aDate.offset);

我明白了

date: 2012/11/13 time: 11:34:58 offset: -5

此解决方案的问题是日期和时间约定是在代码中手动定义的,因此它们不会自动适应用户的语言。

关于javascript - 如何从 Javascript 中的字符串获取时区偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13365756/

相关文章:

javascript - 获取月份的第一天将仅在 alert() 上返回正确的日期

elasticsearch - Elasticsearch 聚合中的动态时区偏移量?

javascript - 创建 .json 文件的一段代码不起作用

javascript - 如何在移动网络上使用 CSS、Javascript 创建半圆菜单(子项)?

javascript - Angular2 typescript 从数组中搜索数组中的乘法值

javascript - 如何使 javascript 库在 Node js 中工作以进行服务器端操作

timezone - Pine Script - 仅在上午 7 点至晚上 10 点之间打开和关闭交易

python - pd.to_datetime 返回一个对象,而不是时间序列

php - MySQL 时区查询

javascript - 在组件中使用 getStaticProps