6

オフセット付きの文字列形式で日付を受け取りましたが、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)

4

2 に答える 2

1

私が見つけた唯一の解決策は、文字列を解析してカスタム時間オブジェクトを作成することです

//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

このソリューションの問題点は、日付と時刻の規則がコード内で手動で定義されているため、ユーザーの言語に自動的に適応されないことです。

于 2013-03-19T17:03:47.413 に答える
0

あなたが何を求めているのか完全にはわかりませんが、あなたが与えた時間がどこから来たのかわからないため、JavaScriptがローカル以外のオフセットを提供できるとは思いません..

したがって、「2012-11-13T11:34:58-05:00」と指定しましたが、この時間がどこで発生したかについての情報はありません。世界のどこの時間でもかまいません。オフセット用。

于 2012-11-13T17:41:20.563 に答える