DateオブジェクトをW3C-DTF形式文字列へ変換

0 件のコメント

JavaScript で DateオブジェクトからW3C-DTF文字列 へ変換する関数。

var g = g || {};
g.date = g.date || {};
g.date.W3CDTF = {};


/**
* DateオブジェクトからW3C-DTFフォーマット文字列へ変換します。
* @param {Date} date Dateオブジェクト
* @return {string} W3C-DTFフォーマット文字列
*/
g.date.W3CDTF.stringify = function (date) {
    // 数値をパディングする関数
    var paddingNumber = function (number, length) {
        var source = String(number);
        var count = length - source.length;

        if (count < 0) {
            return source;
        }

        while (count--) {
            source = '0' + source;
        }

        return source;
    };

    // 必要なデータを準備
    var year = date.getUTCFullYear();
    var month = date.getUTCMonth() + 1;
    var day = date.getUTCDate();
    var hour = date.getUTCHours();
    var minute = date.getUTCMinutes();
    var second = date.getUTCSeconds();
    var millisecond = date.getUTCMilliseconds();
    var timezone = 'Z';
    var text = '';

    // W3C-DTFの YYYY-MM-DDThh:mm:ss.sTZD 形式文字列になるよう結合
    text += year;
    text += '-';
    text += paddingNumber(month, 2);
    text += '-';
    text += paddingNumber(day, 2);
    text += 'T';
    text += paddingNumber(hour, 2);
    text += ':';
    text += paddingNumber(minute, 2);
    text += ':';
    text += paddingNumber(second, 2);
    text += '.';
    text += paddingNumber(millisecond, 3);
    text += timezone;

    return text;
};

以前の記事「W3C-DTF形式文字列をDateオブジェクトへ変換」と対をなす感じ。 必要かどうかは別にして、片側だけってのが気持ち悪かったので作ってみた。

ちなみに、実行結果は次のような感じ。 Date列は「(new Date).toLocaleString()」をぶち込んで、 string列は「g.date.W3CDTF.stringify(new Date())」をぶち込んでる。 (まぁ、見ても当然すぎて何のおもしろみもにけれど…何となく画像を載せたかった^^;)

※コードに間違いがあったので修正しました(2012.09.05)