1

新しい Date オブジェクトから始めて、Date オブジェクトの組み込みメソッドのみを使用して次の文字列表現を生成する方法はありますか?つまり、正規表現や部分文字列操作は許可されていませんか? "2013-02-01T00:00:00-05:00"

4

2 に答える 2

4

Dateオブジェクトの組み込みメソッドのみを使用する

いいえ。JavaScriptでは、カスタムタイムゾーン値を使用してISO 8601文字列を出力することはできず、.toISOSTring常にZ(UTC)を使用します。

さまざまなgetterメソッドを使用して、自分で文字列を作成する必要があります。JavaScriptでISO8601形式の文字列を出力するにはどうすればよいですか?JavaScriptでISOStringをローカルISOStringに変換する方法は?

function customISOstring(date, offset) {
    var date = new Date(date), // copy instance
        h = Math.floor(Math.abs(offset)/60),
        m = Math.abs(offset) % 60;
    date.setMinutes(date.getMinutes() - offset); // apply custom timezone
    function pad(n) { return n < 10 ? '0' + n : n }
    return    date.getUTCFullYear() + '-' // return custom format
        + pad(date.getUTCMonth() + 1) + '-'
        + pad(date.getUTCDate()) + 'T'
        + pad(date.getUTCHours()) + ':'
        + pad(date.getUTCMinutes()) + ':'
        + pad(date.getUTCSeconds())
        + (offset==0 ? "Z" : (offset<0 ? "+" : "-") + pad(h) + ":" + pad(m));
}
于 2013-02-20T23:54:51.143 に答える
2

繰り返しを避けるためにヘルパー関数が必要になりますが、驚くほど簡単です。

var pad = function(n) {return n < 10 ? "0"+n : n;};
var output = date.getFullYear()+"-"+pad(date.getMonth()+1)+"-"+pad(date.getDate())
      +"T"+pad(date.getHours())+":"+pad(date.getMinutes())+":"+pad(date.getSeconds())
      +(date.getTimezoneOffset() > 0 ? "-" : "+")
          +pad(Math.floor(date.getTimezoneOffset()/60))
          +":"+pad(date.getTimezoneOffset()%60);
于 2013-02-20T23:47:01.530 に答える