如何格式化JavaScript日期与浏览器文化?

时间:2011-12-12 02:53:01

标签: javascript jquery date culture

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

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

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

3 个答案:

答案 0 :(得分:4)

Date()对象将为您提供客户端时间(live demo here):

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

JS和jQuery没有内置格式功能。要以不同方式对其进行格式化,请使用format()(1.2kb)here之类的函数,然后以下代码将生成类似" 10/10/2012 8:50 pm&#34的格式; :

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

答案 1 :(得分:3)

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

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

e.g。对我来说,2011年12月13日:

  1. Safari返回13 December 2001
  2. Firefox 12/13/2011
  3. Opera Tuesday December 13, 2011
  4. Chrome Tuesday, December 13, 2011
  5. IE 6 Tuesday, 13 December, 2011
  6. 因此,只有Safari和IE实际上使用系统设置,似乎其他浏览器的开发人员要么懒得,无动于衷或无知以适应非美国用户。

    另一种方法是询问用户他们喜欢哪种格式,或者只使用明确的格式,例如:每个人都会理解2011年12月13日。如果你真的必须只使用数字,那么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('-');
    }
    

答案 2 :(得分:2)

了解系统是否在其字符串方法中使用日 - 月或月 - 日,主要用于设置用户输入的顺序,这很方便。 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