如何根据浏览器文化格式化JavaScript Date?

我需要格式化JavaScript Date对象。 对于浏览器使用的文化,它应以短格式显示日期和时间,例如:

20/10/2011 10:20 PM 10.20.2011 22:20 

我该怎么做(最好用jQuery)?

Date()对象将为您提供客户端时间( 此处为现场演示 ):

 var now=new Date(); alert(now.toLocaleString()); 

JS和jQuery没有内置格式函数。 要以不同的方式格式化,请使用format() (1.2kb)之类的函数,然后以下代码将生成类似“10/10/2012 8:50 pm”的格式:

 var now=new Date(); alert( now.format("mm/dd/yy h:MM:ss TT") ); 

浏览器使用日期格式的系统设置,或使用自己的(通常以美国为中心)设置。

有一个Date.prototype.toLocaleDateString()方法应该根据当前系统设置返回一个日期,但是由于浏览器之间的不一致,它依赖于实现并且完全不可靠。

例如,对我来说,2011年12月13日:

  1. Safari 13 December 2001返回
  2. Firefox 12/13/2011
  3. 歌剧Tuesday December 13, 2011
  4. Chrome Tuesday, December 13, 2011
  5. IE 6 Tuesday, 13 December, 2011

所以只有Safari和IE实际上使用系统设置,似乎其他浏览器的开发人员要么懒得,无动于衷或无知以适应非美国用户。

另一种方法是询问用户他们喜欢哪种格式,或者只使用明确的格式,例如每个人都能理解13-Dec-2011。 如果你真的必须使用数字,那么ISO-8601格式应该可以正常使用:2011-12-13,它的附加好处是它很容易排序。

一些以上述格式打印短日期的函数:

 // format: 2011/12/5 function shortDate1(obj) { obj = obj || new Date(); return obj.getFullYear() + '/' + (obj.getMonth() + 1) + '/' + obj.getDate(); } // format: 2011/12/05 // (padded single digit month and day) function shortDate2(obj) { function z(n) { return (n < 10? '0' : '') + n; } obj = obj || new Date(); return obj.getFullYear() + '/' + z(obj.getMonth() + 1) + '/' + z(obj.getDate()); } // format: 15-Dec-2011 function shortDate3(obj) { obj = obj || new Date(); function z(n) { return (n < 10? '0' : '') + n; } months = ['Jan','Feb','Mar','Apr','May','Jun', 'Jul','Aug','Sep','Oct','Nov','Dec']; return [z(obj.getDate()),months[obj.getMonth()],obj.getFullYear()].join('-'); } 

知道系统是否在其字符串方法中使用日 – 月或月 – 日,主要用于设置用户输入的顺序,这很方便。 toLocaleString适用于显示已知日期 – 它是国际性的。

  Date.dmOrder=(function(){ return Date.parse('2/6/2009')> Date.parse('6/2/2009'); })() if(Date.dmOrder)// ask for the date first else // ask for the month first