in 程式小心得

Java Script 分析 iso 8601 日期模式至 Date 物件

我在「Parsing W3C's ISO 8601 Date/Times in JavaScript」看到如下的程式碼,這段主要的功能把「2004-12-21 23:11:00」這個字串,拆解回去 java script 的 Date 物件。通常在 Mysql 裡存的資料顯示出來都是這種格式,如果 java script 收到這種格式的時候,除了自已用 substring 分析之外,下面是使用 regexp 作分析的方法。

Date.prototype.setISO8601 = function (string) {
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
        "( ([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
        "( |(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
    var d = string.match(new RegExp(regexp));

    var offset = 0;
    var date = new Date(d[1], 0, 1);

    if (d[3]) { date.setMonth(d[3] - 1); }
    if (d[5]) { date.setDate(d[5]); }
    if (d[7]) { date.setHours(d[7]); }
    if (d[8]) { date.setMinutes(d[8]); }
    if (d[10]) { date.setSeconds(d[10]); }
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
    if (d[14]) {
        offset = (Number(d[16]) * 60) + Number(d[17]);
        offset *= ((d[15] == '-') ? 1 : -1);
    }

    offset -= date.getTimezoneOffset();
    time = (Number(date) + (offset * 60 * 1000));
    this.setTime(Number(time));
}

我這個有作一些修改,所以其實已經不是標準的格式了。只是為了分析 php 的日期部分比較方便而已。

Write a Comment

Comment

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料