datetime date - 我在哪裡可以找到有關在JavaScript中格式化日期的文檔?





format yyyymmdd (25)


use this functions

toTimeString() and toLocaleDateString()

refer below link for more details developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

我注意到JavaScript的new Date()函數在接受多種格式的日期方面非常聰明。

Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")

在調用new Date()函數時,我無法在任何地方找到顯示所有有效字符串格式的文檔。

這是將字符串轉換為日期。 如果我們看一下另一面,即將日期對象轉換為字符串,直到現在我的印像是JavaScript沒有內置API來將日期對象格式化為字符串。

編者按:以下方法是提問者在特定瀏覽器上的嘗試,但一般不起作用; 請參閱此頁面上的答案以查看一些實際解決方案。

今天,我在日期對像上使用了toString()方法,並且令人驚訝地發揮了將日期格式化為字符串的作用。

var d1 = new Date();
d1.toString('yyyy-MM-dd');       //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy')  //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome

同樣在這裡,我找不到任何有關我們可以將日期對象格式化為字符串的方式的任何文檔。

列出Date()對象支持的格式說明符的文檔在哪裡?




JsSimpleDateFormat is a library that can format the date object and parse the formatted string back to Date object. It uses the Java format (SimpleDateFormat class). The name of months and days can be localized.

例:

var sdf = new JsSimpleDateFormat("EEEE, MMMM dd, yyyy");
var formattedString = sdf.format(new Date());
var dateObject = sdf.parse("Monday, June 29, 2009");



Just another option, which I wrote:

DP_DateExtensions Library

Not sure if it'll help, but I've found it useful in several projects - looks like it'll do what you need.

Supports date/time formatting, date math (add/subtract date parts), date compare, date parsing, etc. It's liberally open sourced.

No reason to consider it if you're already using a framework (they're all capable), but if you just need to quickly add date manipulation to a project give it a chance.




瀏覽了其他答案中提供的幾個選項後,我決定編寫自己的有限但簡單的解決方案,其他人也可能會發現有用。

/**
* Format date as a string
* @param date - a date object (usually "new Date();")
* @param format - a string format, eg. "DD-MM-YYYY"
*/
function dateFormat(date, format) {
    // Calculate date parts and replace instances in format string accordingly
    format = format.replace("DD", (date.getDate() < 10 ? '0' : '') + date.getDate()); // Pad with '0' if needed
    format = format.replace("MM", (date.getMonth() < 9 ? '0' : '') + (date.getMonth() + 1)); // Months are zero-based
    format = format.replace("YYYY", date.getFullYear());
    return format;
}

用法示例:

console.log("The date is: " + dateFormat(new Date(), "DD/MM/YYYY"));



The correct way to format a date to return "2012-12-29" is with the script from JavaScript Date Format :

var d1 = new Date();
return d1.format("dd-m-yy");

This code does NOT work:

var d1 = new Date();
d1.toString('yyyy-MM-dd');      



框架免費,有限但輕

var d = (new Date()+'').split(' ');
// ["Tue", "Sep", "03", "2013", "21:54:52", "GMT-0500", "(Central", "Daylight", "Time)"]

[d[3], d[1], d[2], d[4]].join(' ');
// "2013 Sep 03 21:58:03"



Personally, because I use both PHP and jQuery/javascript in equal measures, I use the date function from php.js http://phpjs.org/functions/date/

Using a library that uses the same format strings as something I already know is easier for me, and the manual containing all of the format string possibilities for the date function is of course online at php.net

You simply include the date.js file in your HTML using your preferred method then call it like this:

var d1=new Date();
var datestring = date('Y-m-d', d1.valueOf()/1000);

You can use d1.getTime() instead of valueOf() if you want, they do the same thing.

The divide by 1000 of the javascript timestamp is because a javascript timestamp is in miliseconds but a PHP timestamp is in seconds.




如果您已經在項目中使用jQuery UI ,則可以使用內置的datepicker方法來設置日期對象的格式:

$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

但是,日期選擇器僅格式化日期,並且不能格式化時間。

看看jQuery UI datepicker formatDate的例子。




列出Date()對象支持的格式說明符的文檔在哪裡?

今天我偶然發現了這個問題,對於沒有人花時間回答這個簡單問題感到非常驚訝。 當然,有很多圖書館可以幫助您控制日期。 有些比其他人好。 但這不是問題的問題。

AFAIK,純JavaScript不支持指定要使用它們的格式說明符。 但它支持格式化日期和/或時間的方法,例如.toLocaleDateString() .toLocaleTimeString().toUTCString()

我最經常使用的Date對象引用位於w3schools.com/jsref/jsref_obj_date.asp (但快速Google搜索將揭示更多可能更好地滿足您需求的內容)。

另請注意, 日期對象屬性部分提供了一個prototype鏈接,該鏈接說明了使用自定義方法擴展Date對象的一些方法。 JavaScript社區多年來一直存在一些關於這是否是最佳實踐的爭論 ,我並不是主張或反對它,只是指出它的存在。




momentjs

它是一個(輕量級)JavaScript日期庫,用於解析,操作和格式化日期。

var a = moment([2010, 1, 14, 15, 25, 50, 125]);
a.format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
a.format("ddd, hA");                       // "Sun, 3PM"

(*)輕量級含義9.3KB縮小+ gzip以最小的可能設置(feb 2014)




您可能會發現對日期對象的修改很有用,它比任何庫都小,並且可以輕鬆擴展以支持不同的格式:

注意:

  • 它使用在舊瀏覽器中未定義的Object.keys() ,所以您可能需要從給定鏈接實現填充。

Date.prototype.format = function(format) {
    // set default format if function argument not provided
    format = format || 'YYYY-MM-DD hh:mm';

    var zeropad = function(number, length) {
            number = number.toString();
            length = length || 2;
            while(number.length < length)
                number = '0' + number;
            return number;
        },
        // here you can define your formats
        formats = {
            YYYY: this.getFullYear(),
            MM: zeropad(this.getMonth() + 1),
            DD: zeropad(this.getDate()),
            hh: zeropad(this.getHours()),
            mm: zeropad(this.getMinutes())
        },
        pattern = '(' + Object.keys(formats).join(')|(') + ')';

    return format.replace(new RegExp(pattern, 'g'), function(match) {
        return formats[match];
    });
};

USE

var now = new Date;
console.log(now.format());
// outputs: 2015-02-09 11:47
var yesterday = new Date('2015-02-08');
console.log(yesterday.format('hh:mm YYYY/MM/DD'));
// outputs: 00:00 2015/02/08



自定義格式功能:

對於固定格式,一個簡單的功能可以完成工作。 以下示例生成國際格式YYYY-MM-DD:

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

注意:但是,擴展Javascript標準庫通常不是一個好主意(例如,通過將此函數添加到Date的原型中)。

更高級的功能可以基於格式參數生成可配置的輸出。 在同一頁面中有幾個很好的例子。

如果編寫一個格式化函數的時間太長了,那麼有很多的庫都圍繞它來做。 其他一些答案已經列舉了他們。 但是越來越多的依賴關係也與此相反。

標準ECMAScript格式化功能:

由於更新版本的ECMAscript, Date類具有一些特定的格式功能:

toDateString :依賴於實現,只顯示日期。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString :顯示ISO 8601日期和時間。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

toJSON :JSON的字符串。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString :依賴於實現,日期為區域設置格式。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString :依賴於實現,以區域設置格式顯示日期和時間。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString :依賴於實現,是區域設置格式的時間。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString :日期的通用toString。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 11 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

注意:可以從這些格式化函數中生成自定義輸出:

new Date().toISOString().slice(0,10); // By @Image72, return YYYY-MM-DD



d = Date.now();
d = new Date(d);
d = (d.getMonth()+1)+'/'+d.getDate()+'/'+d.getFullYear()+' '+(d.getHours() > 12 ? d.getHours() - 12 : d.getHours())+':'+d.getMinutes()+' '+(d.getHours() >= 12 ? "PM" : "AM");

console.log(d);




你引用的功能不是標準的Javascript,不可能跨瀏覽器移植,因此也不是很好的做法。 ECMAScript 3規範保留了解析和輸出格式的功能,直到Javascript實現。 ECMAScript 5添加了ISO8601支持的一個子集。 我相信你提到的toString()函數是一個瀏覽器中的創新(Mozilla?)

幾個庫提供例程來對此進行參數化,一些庫提供了廣泛的本地化支持。 您也可以查看dojo.date.locale的方法。




我做了這個非常簡單的格式化程序,它被剪切/ n /可粘貼(更新為整潔版本):

function DateFmt(fstr) {
  this.formatString = fstr

  var mthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  var dayNames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var zeroPad = function(number) {
     return ("0"+number).substr(-2,2);
  }

  var dateMarkers = {
    d:['getDate',function(v) { return zeroPad(v)}],
    m:['getMonth',function(v) { return zeroPad(v+1)}],
    n:['getMonth',function(v) { return mthNames[v]; }],
    w:['getDay',function(v) { return dayNames[v]; }],
    y:['getFullYear'],
    H:['getHours',function(v) { return zeroPad(v)}],
    M:['getMinutes',function(v) { return zeroPad(v)}],
    S:['getSeconds',function(v) { return zeroPad(v)}],
    i:['toISOString']
  };

  this.format = function(date) {
    var dateTxt = this.formatString.replace(/%(.)/g, function(m, p) {
      var rv = date[(dateMarkers[p])[0]]()

      if ( dateMarkers[p][1] != null ) rv = dateMarkers[p][1](rv)

      return rv

    });

    return dateTxt
  }

}

fmt = new DateFmt("%w %d:%n:%y - %H:%M:%S  %i")
v = fmt.format(new Date())

http://snipplr.com/view/66968.82825/




If you don't need all the features that a library like momentjs provides, then you can use my port of strftime . It's lightweight (1.35 KB vs. 57.9 KB minified compared to Moment.js 2.15.0) and provides most of the functionality of strftime() .

/* Port of strftime(). Compatibility notes:
 *
 * %c - formatted string is slightly different
 * %D - not implemented (use "%m/%d/%y" or "%d/%m/%y")
 * %e - space is not added
 * %E - not implemented
 * %h - not implemented (use "%b")
 * %k - space is not added
 * %n - not implemented (use "\n")
 * %O - not implemented
 * %r - not implemented (use "%I:%M:%S %p")
 * %R - not implemented (use "%H:%M")
 * %t - not implemented (use "\t")
 * %T - not implemented (use "%H:%M:%S")
 * %U - not implemented
 * %W - not implemented
 * %+ - not implemented
 * %% - not implemented (use "%")
 *
 * strftime() reference:
 * http://man7.org/linux/man-pages/man3/strftime.3.html
 *
 * Day of year (%j) code based on Joe Orost's answer:
 * http://.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366
 *
 * Week number (%V) code based on Taco van den Broek's prototype:
 * http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
 */
function strftime(sFormat, date) {
  if (!(date instanceof Date)) date = new Date();
  var nDay = date.getDay(),
    nDate = date.getDate(),
    nMonth = date.getMonth(),
    nYear = date.getFullYear(),
    nHour = date.getHours(),
    aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
    isLeapYear = function() {
      if (nYear&3!==0) return false;
      return nYear%100!==0 || year%400===0;
    },
    getThursday = function() {
      var target = new Date(date);
      target.setDate(nDate - ((nDay+6)%7) + 3);
      return target;
    },
    zeroPad = function(nNum, nPad) {
      return ('' + (Math.pow(10, nPad) + nNum)).slice(1);
    };
  return sFormat.replace(/%[a-z]/gi, function(sMatch) {
    return {
      '%a': aDays[nDay].slice(0,3),
      '%A': aDays[nDay],
      '%b': aMonths[nMonth].slice(0,3),
      '%B': aMonths[nMonth],
      '%c': date.toUTCString(),
      '%C': Math.floor(nYear/100),
      '%d': zeroPad(nDate, 2),
      '%e': nDate,
      '%F': date.toISOString().slice(0,10),
      '%G': getThursday().getFullYear(),
      '%g': ('' + getThursday().getFullYear()).slice(2),
      '%H': zeroPad(nHour, 2),
      '%I': zeroPad((nHour+11)%12 + 1, 2),
      '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3),
      '%k': '' + nHour,
      '%l': (nHour+11)%12 + 1,
      '%m': zeroPad(nMonth + 1, 2),
      '%M': zeroPad(date.getMinutes(), 2),
      '%p': (nHour<12) ? 'AM' : 'PM',
      '%P': (nHour<12) ? 'am' : 'pm',
      '%s': Math.round(date.getTime()/1000),
      '%S': zeroPad(date.getSeconds(), 2),
      '%u': nDay || 7,
      '%V': (function() {
              var target = getThursday(),
                n1stThu = target.valueOf();
              target.setMonth(0, 1);
              var nJan1 = target.getDay();
              if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7);
              return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2);
            })(),
      '%w': '' + nDay,
      '%x': date.toLocaleDateString(),
      '%X': date.toLocaleTimeString(),
      '%y': ('' + nYear).slice(2),
      '%Y': nYear,
      '%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'),
      '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1')
    }[sMatch] || sMatch;
  });
}

Sample usage:

strftime('%F'); // Returns "2016-09-15"
strftime('%A, %B %e, %Y'); // Returns "Thursday, September 15, 2016"

// You can optionally pass it a Date object...

strftime('%x %X', new Date('1/1/2016')); // Returns "1/1/2016 12:00:00 AM"

The latest code is available here: https://github.com/thdoan/strftime




這是我使用了很多的功能。 結果是yyyy-mm-dd hh:mm:ss.nnn。

function date_and_time() {
    var date = new Date();
    //zero-pad a single zero if needed
    var zp = function (val){
        return (val <= 9 ? '0' + val : '' + val);
    }

    //zero-pad up to two zeroes if needed
    var zp2 = function(val){
        return val <= 99? (val <=9? '00' + val : '0' + val) : ('' + val ) ;
    }

    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    var h = date.getHours();
    var min = date.getMinutes();
    var s = date.getSeconds();
    var ms = date.getMilliseconds();
    return '' + y + '-' + zp(m) + '-' + zp(d) + ' ' + zp(h) + ':' + zp(min) + ':' + zp(s) + '.' + zp2(ms);
}



您可以使用meizz指出的新format方法來擴展Date對象,下面是作者給出的代碼。 這裡是一個jsfiddle

Date.prototype.format = function(format) //author: meizz
{
  var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(),    //day
    "h+" : this.getHours(),   //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3),  //quarter
    "S" : this.getMilliseconds() //millisecond
  }

  if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
    (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  for(var k in o)if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length==1 ? o[k] :
        ("00"+ o[k]).substr((""+ o[k]).length));
  return format;
}

alert(new Date().format("yyyy-MM-dd"));
alert(new Date("january 12 2008 11:12:30").format("yyyy-MM-dd h:mm:ss"));



簡答

沒有JavaScript支持的“通用”文檔; 每個具有JavaScript的瀏覽器都是一個實現。 但是,大多數現代瀏覽器傾向於遵循一個標準,那就是EMCAScript標準; ECMAScript標準字符串最少會採用ISO 8601定義的修改實現。

除此之外, IETF制定了第二個標準,即瀏覽器也遵循此IETF ,這是RFC 2822中定義的時間戳的定義。實際文檔可以在底部的參考列表中找到。

從這裡你可以期待基本的功能,但“應該”是什麼本質上不是“是”。 儘管如此,我仍然會深入一點,因為看起來只有三個人真的回答了這個問題(Scott,goofballLogic和peller),對我而言,這意味著大多數人不知道當你創建一個Date對象。

長答案

列出Date()對象支持的格式說明符的文檔在哪裡?


為了回答這個問題,或者通常甚至尋找這個問題的答案,你需要知道JavaScript不是一種新穎的語言; 它實際上是ECMAScript的一個實現,並且遵循ECMAScript標準(但是請注意,JavaScript實際上也是在這些標準之前進行的; EMCAScript標準是基於LiveScript / JavaScript的早期實現構建的)。 目前的ECMAScript標準是5.1(2011); 在最初提出這個問題時(2009年6月),標準為3(4被放棄),但在2009年底發布後不久發布了5個。這應該提出一個問題; 什麼標準的JavaScript實現可能遵循,可能並不反映實際到位,因為a)它是一個給定的標準的實現,b)並非所有標準的實現都是清教徒,並且c)功能不是與新標準d)實施是一項持續不斷的工作

基本上,在處理javascript時,你正在處理一個實現(javascript本身)的派生(JavaScript特定於瀏覽器)。 例如,Google的V8實現了ECMAScript 5.0,但Internet Explorer的JScript並不試圖符合任何ECMAScript標準,但Internet Explorer 9確實符合ECMAScript 5.0。

當一個參數傳遞給新的Date()時,它會投射這個函數原型:

new Date(value)

當兩個或更多的參數傳遞給新的Date()時,它會投射這個函數原型:

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )


這兩個函數都應該看起來很熟悉,但是這並不能立即回答你的問題,而作為可接受的“日期格式”量化的東西需要進一步解釋。 當你將一個字符串傳遞給新的Date()時,它會調用原型(注意,我使用鬆散的單詞原型 ;版本可能是單個函數,或者它可能是單個函數中條件語句的一部分) 新的日期(值)與您的字符串作為“值”參數的參數。 這個函數將首先檢查它是一個數字還是一個字符串。 這個函數的文檔可以在這裡找到:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

由此我們可以推斷,為了獲得新Date(值)所允許的字符串格式,我們必須查看Date.parse(string)方法。 這個方法的文檔可以在這裡找到:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

我們可以進一步推斷日期預計將採用修改的ISO 8601擴展格式,如下所示:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

但是,我們可以從經驗中認識到,JavaScript的Date對象接受其他格式(首先由此問題的存在強制執行),這是可以的,因為ECMAScript允許實現特定的格式。 但是,這仍然不能回答可用格式上有哪些文檔可用的問題,也不能回答實際允許的格式。 我們將看看谷歌的JavaScript實現,V8; 請注意,我並不是說這是“最好”的JavaScript引擎(如何定義“最好”甚至“優秀”),並且不能認為V8中允許的格式代表當前可用的所有格式,但我認為這是公平的假設他們確實遵循現代期望。

Google的V8,date.js,DateConstructor

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

查看DateConstructor函數,我們可以推斷我們需要找到DateParse函數; 但請注意,“年份”不是實際的年份,只是對“年份”參數的參考。

Google的V8,date.js,DateParse

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

這將調用%DateParseString,它實際上是C ++函數的運行時函數引用。 它指的是下面的代碼:

Google的V8,runtime.cc,%DateParseString

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

我們在這個函數中關心的函數調用是用於DateParser :: Parse(); 忽略這些函數調用的邏輯,這些只是檢查符合編碼類型(ASCII和UC16)。 DateParser :: Parse在這裡定義:

Google的V8,dateparser-inl.h,DateParser :: Parse

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

這是實際定義它接受的格式的函數。 本質上,它檢查EMCAScript 5.0 ISO 8601標準,如果它不符合標準,則它將嘗試基於傳統格式構建日期。 基於評論的幾點要點:

  1. 解析器未知的第一個數字之前的單詞將被忽略。
  2. 括號內的文字被忽略。
  3. 無符號數字後跟“:”被解釋為“時間分量”。
  4. 無符號數字後跟“。”被解釋為“時間分量”,並且後面必須以毫秒為單位。
  5. 帶小數或小時分鐘的簽名數字(例如+5:15或+0515)被解釋為時區。
  6. 在聲明小時和分鐘時,可以使用“hh:mm”或“hhmm”。
  7. 指示時區的詞語被解釋為時區。
  8. 所有其他數字都被解釋為“日期組件”。
  9. 以月份的前三位開頭的所有單詞都被解釋為月份。
  10. 您可以使用兩種格式中的任何一種來定義分鐘和小時:“hh:mm”或“hhmm”。
  11. 數字處理完畢後,不允許使用“+”,“ - ”和不匹配的“)”等符號。
  12. 匹配多種格式的項目(例如1970-01-01)將作為符合標準的EMCAScript 5.0 ISO 8601字符串進行處理。

所以這應該足以給你一個關於將字符串傳遞給Date對象的期望的基本概念。 您可以通過查看Mozilla指向Mozilla開發者網絡(符合IETF RFC 2822時間戳)的以下規範來進一步擴展這一點:

http://tools.ietf.org/html/rfc2822#page-14

Microsoft開發人員網絡另外提到了Date對象的附加標準:ECMA-402,ECMAScript國際化API規範,它與ECMAScript 5.1標準(以及將來的標準)是互補的。 這可以在這裡找到:

http://www.ecma-international.org/ecma-402/1.0/

無論如何,這應該有助於強調沒有“文檔”能夠普遍表示所有的javascript實現,但是仍然有足夠的文檔可以合理地理解Date對象可以接受哪些字符串。 當你想到這個問題時,是否有問題? :P

參考

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

http://tools.ietf.org/html/rfc2822#page-14

http://www.ecma-international.org/ecma-402/1.0/

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

資源

developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx




See dtmFRM.js . If you are familiar with C#'s custom date and time format string, this library should do the exact same thing.

DEMO :

var format = new dtmFRM();
var now = new Date().getTime();

$('#s2').append(format.ToString(now,"This month is : MMMM") + "</br>");
$('#s2').append(format.ToString(now,"Year is  : y or yyyy or yy") + "</br>");
$('#s2').append(format.ToString(now,"mm/yyyy/dd") + "</br>");
$('#s2').append(format.ToString(now,"dddd, MM yyyy ") + "</br>");
$('#s2').append(format.ToString(now,"Time is : hh:mm:ss ampm") + "</br>");
$('#s2').append(format.ToString(now,"HH:mm") + "</br>");
$('#s2').append(format.ToString(now,"[ddd,MMM,d,dddd]") + "</br></br>");

now = '11/11/2011 10:15:12' ;

$('#s2').append(format.ToString(now,"MM/dd/yyyy hh:mm:ss ampm") + "</br></br>");

now = '40/23/2012'
$('#s2').append(format.ToString(now,"Year is  : y or yyyy or yy") + "</br></br>");



The library sugar.js has some great functionality for working with dates in JavaScript. And it is very well documented .

Sugar gives the Date class much love starting with the Date.create method which can understand dates in just about any format in 15 major languages, including relative formats like "1 hour ago". Dates can also be output in any format or language using an easy to understand syntax, with shortcuts to commonly used date formats. Complex date comparison is also possible with methods like is, which understand any format and apply built in precision.

A few examples:

Date.create('July 4, 1776')  -> July 4, 1776
Date.create(-446806800000)   -> November 5, 1955
Date.create(1776, 6, 4)      -> July 4, 1776
Date.create('1776年07月04日', 'ja') -> July 4, 1776
Date.utc.create('July 4, 1776', 'en')  -> July 4, 1776

Date.create().format('{Weekday} {d} {Month}, {yyyy}')    -> Monday July 4, 2003
Date.create().format('{hh}:{mm}')                        -> 15:57
Date.create().format('{12hr}:{mm}{tt}')                  -> 3:57pm
Date.create().format(Date.ISO8601_DATETIME)              -> 2011-07-05 12:24:55.528Z

Date.create().is('the 7th of June') -> false
Date.create().addMonths(2); ->"Sunday, June 15, 2014 13:39"



Formatting and especially parsing dates in JavaScript can be a bit of a headache. Not all browsers handle dates in the same way. So while it's useful to know the base methods, its more practical to use a helper library.

The XDate javascript library by Adam Shaw has been around since mid-2011 and is still under active development. It has fantastic documentation, a great API, formatting, tries to remain backwards-compatible and even supports localized strings.

Link to changing the locale strings: https://gist.github.com/1221376




我喜歡使用JavaScript使用日期 格式化時間和日期的10種方法

基本上,你有三種方法,你必須結合自己的字符串:

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

例:

<script type="text/javascript">
    var d = new Date();
    var curr_date = d.getDate();
    var curr_month = d.getMonth() + 1; //Months are zero based
    var curr_year = d.getFullYear();
    console.log(curr_date + "-" + curr_month + "-" + curr_year);
</script>



Just to continue gongzhitaao's solid answer - this handles AM/PM

 Date.prototype.format = function (format) //author: meizz
{
    var hours = this.getHours();
    var ttime = "AM";
    if(format.indexOf("t") > -1 && hours > 12)
    {
        hours = hours - 12;
        ttime = "PM";
     }

var o = {
    "M+": this.getMonth() + 1, //month
    "d+": this.getDate(),    //day
    "h+": hours,   //hour
    "m+": this.getMinutes(), //minute
    "s+": this.getSeconds(), //second
    "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter
    "S": this.getMilliseconds(), //millisecond,
    "t+": ttime
}

if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
  (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length == 1 ? o[k] :
        ("00" + o[k]).substr(("" + o[k]).length));
return format;
}



In Ext JS 4 it can be done as follows:

var mergedObject = Ext.Object.merge(object1, object2)

// Or shorter:
var mergedObject2 = Ext.merge(object1, object2)

See merge( object ) : Object .





javascript datetime date