如何根据浏览器文化格式化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日:
- Safari
13 December 2001
返回 - Firefox
12/13/2011
- 歌剧
Tuesday December 13, 2011
- Chrome
Tuesday, December 13, 2011
- 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