4

iso8061の日付からタイムスタンプを取得するときに少し問題が発生します。何らかの理由でChromeでは完全に機能しますが、Firefoxでは無効な日付エラーが発生します。正確な行は次のとおりです。

var date = new Date(time.replace(/-/g,"/").replace(/[TZ]/g," ")); 

日付を(変数時間として)渡してみましたが、http 2011-03-09T16:46:58+00:00//www.jibbering.com/faq/#datesで概説されている仕様に従っていますが、Firefoxで動作させることができないようです。実際、最後の方法はどちらのブラウザでも機能しませんでした。2011-03-09T16:46:58+00002011-03-09T16:48:37Z

誰かがこのiso8061の日付をタイムスタンプに変えるのを手伝ってくれるなら、それは素晴らしいことです。

ありがとう、アンジェロR。

4

2 に答える 2

6

JavaScript ISO8601/RFC3339 Date Parserを見てください:

彼らのコード:

Date.prototype.setISO8601 = function(dString){
    var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)(\.\d+)?(Z|([+-])(\d\d)(:)?(\d\d))/;
    if (dString.toString().match(new RegExp(regexp))) {
        var d = dString.match(new RegExp(regexp));
        var offset = 0;
        this.setUTCDate(1);
        this.setUTCFullYear(parseInt(d[1],10));
        this.setUTCMonth(parseInt(d[3],10) - 1);
        this.setUTCDate(parseInt(d[5],10));
        this.setUTCHours(parseInt(d[7],10));
        this.setUTCMinutes(parseInt(d[9],10));
        this.setUTCSeconds(parseInt(d[11],10));
        if (d[12]) {
            this.setUTCMilliseconds(parseFloat(d[12]) * 1000);
        }
        else {
            this.setUTCMilliseconds(0);
        }
        if (d[13] != 'Z') {
            offset = (d[15] * 60) + parseInt(d[17],10);
            offset *= ((d[14] == '-') ? -1 : 1);
            this.setTime(this.getTime() - offset * 60 * 1000);
        }
    }
    else {
        this.setTime(Date.parse(dString));
    }
    return this;
};

そして、次のように使用できます。

var today = new Date();
today.setISO8601('2008-12-19T16:39:57.67Z');

おそらくそれほど快適ではありませんが、この関数を書き直すか、ISO-8601 形式に基づいて日付を返す別の関数を書くことができます

于 2011-03-09T17:04:10.630 に答える
0

コンストラクターが文字列引数を処理する方法は、Dateブラウザーによって異なります。この質問に対する最初の回答が指摘しているように、IE はハイフンを認識しますが、Firefox は認識しません。これはほんの一例です。

個々の日付部分を期待するコンストラクターを使用するのがおそらく最善です。

于 2011-03-09T17:08:18.817 に答える