0

次のコードを取ります。

var first = new Date("2011-09-17T15:12:04.331Z");
var second = new Date("2011-09-17T19:55:19.269Z");
alert(first < second);

ブラウザ(http://jsfiddle.net/fdqjs/0/)では、trueと警告します。Titanium Mobileでは、0またはfalseを警告します。どうしてこれなの?ソースとは異なる形式で日付を取得できません。

4

1 に答える 1

1

私の推測では、Titanium Mobileは、使用している日付形式をカバーするのに十分な新しいバージョンのJavascriptを実行していません。

Dateオブジェクトの仕様を調べると、RFC 1123で定義されている日付が使用され、 RFC 822から日付の定義が取得されます。これは、使用している正確な形式をサポートしているようには見えません。Javascript 1.8.5以降では、ISO 8601の形式の日付も受け入れます。これは、所有しているものをカバーしているように見えます。

可能であれば、古い仕様のように機能するように日付文字列を変更することをお勧めします。詳細については、MDNを参照してください。

有効なRFC822日時の例は次のとおりです。

02 Oct 2002 15:00:00 +0200

日付が常に質問で示した形式とまったく同じである場合は、次のような簡単な変換を行うことができます。

function ConvertDate(dateIn) {
    var monthStr = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    // desired format "02 Oct 2002 15:00:00 +0200"
    var dateOut = dateIn;
    var matches = dateIn.match(/(\d+)\D+(\d+)\D+(\d+)T(.*)Z$/);
    if (matches) {
        dateOut = matches[3] + " " + 
            monthStr[parseInt(matches[2] - 1, 10)] + " " + 
            matches[1] + " " + 
            matches[4] + " GMT";
    }
    return(dateOut);
}

ここでのデモ:http://jsfiddle.net/jfriend00/APxN7/

注:この単純な関数は、日付が常に質問で表示する正確な形式であり、入力として任意のISO 8601日付を処理せず、表示する形式のみを処理するため、常に有効であると想定しています。

現在の日付をjavascriptオブジェクトに取り込むには、次のようにします。

var now = Date();

次に、オブジェクトのDateオブジェクトに定義されている任意のメソッドnowを使用したり、日付の任意の部分を取得したり、文字列に変換したりするメソッドを含めることができます。

ConvertDateが出力する日付のインターネット形式を取得するには、次を使用します。

now.toUTCString();
于 2011-09-17T21:52:37.083 に答える