格式化 JavaScript 日期

在現代瀏覽器中格式化 JavaScript 日期

在現代瀏覽器(*)中, Date.prototype.toLocaleDateString() 允許你以方便的方式定義 Date 的格式。

它需要以下格式:

dateObj.toLocaleDateString([locales [, options]])

locales 引數應該是帶有 BCP 47 語言標記的字串,或者是此類字串的陣列。

options 引數應該是具有以下部分或全部屬性的物件:

  • localeMatcher :可能的值是 lookupbest fit; 預設為 best fit
  • timeZone :實現必須識別的唯一值是 UTC; 預設值是執行時的預設時區
  • hour12 :可能的值是 truefalse; 預設值取決於語言環境
  • formatMatcher :可能的值是 basicbest fit; 預設為 best fit
  • 工作日 :可能的值是 narrowshortlong
  • 時代 :可能的值是 narrowshortlong
  • :可能的價值是 numeric2-digit
  • :可能的值是 numeric2-digitnarrowshortlong
  • :可能的值是 numeric2-digit
  • 小時 :可能的值是 numeric2-digit
  • 分鐘 :可能的值是 numeric2-digit
  • 第二 :可能的值是 numeric2-digit
  • timeZoneName :可能的值是 shortlong

如何使用

var today = new Date().toLocaleDateString('en-GB', {  
    day : 'numeric',
    month : 'short',
    year : 'numeric'
});

輸出如果在 2036 年 1 月 24 日執行:

'24 Jan 2036'

去定製

如果 Date.prototype.toLocaleDateString() 不夠靈活,無法滿足你的任何需求,你可能需要考慮建立一個如下所示的自定義 Date 物件:

var DateObject = (function() {
    var monthNames = [
      "January", "February", "March",
      "April", "May", "June", "July",
      "August", "September", "October",
      "November", "December"
    ];
    var date = function(str) {
        this.set(str);
    };
    date.prototype = {
        set : function(str) {
            var dateDef = str ? new Date(str) : new Date();
            this.day = dateDef.getDate();
            this.dayPadded = (this.day < 10) ? ("0" + this.day) : "" + this.day;
            this.month = dateDef.getMonth() + 1;
            this.monthPadded = (this.month < 10) ? ("0" + this.month) : "" + this.month;
            this.monthName = monthNames[this.month - 1];
            this.year = dateDef.getFullYear();
        },
        get : function(properties, separator) {
            var separator = separator ? separator : '-'
                ret = [];
            for(var i in properties) {
                ret.push(this[properties[i]]);
            }
            return ret.join(separator);
        }
    };
    return date;
})();

如果你在 2019 年 1 月 20 日包含該程式碼並執行了 new DateObject(),它將生成具有以下屬性的物件:

day: 20
dayPadded: "20"
month: 1
monthPadded: "01"
monthName: "January"
year: 2019

要獲取格式化字串,你可以執行以下操作:

new DateObject().get(['dayPadded', 'monthPadded', 'year']);

這將產生以下輸出:

20-01-2016

(*) 根據 MDN現代瀏覽器意味著 Chrome 24 +,Firefox 29 +,IE11,Edge12 +,Opera 15+和 Safari 夜間構建