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

How format JavaScript Date with regard to the browser culture?

本文关键字:格式化 JavaScript Date 文化 浏览器 何根      更新时间:2023-09-26

我需要格式化JavaScript Date对象。它应该根据浏览器使用的区域性以简短格式显示日期和时间,例如:

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

我如何做到这一点(最好使用jQuery)?

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

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

。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

所以实际上只有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('-');
}

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

var now=new Date();
alert(now.toLocaleString());
JS和jQuery没有内置的格式函数。使用format() (1.2kb)这样的函数来格式化它,然后下面的代码将产生一个类似"10/10/2012 8:50pm"的格式:
var now=new Date();    
alert( now.format("mm/dd/yy h:MM:ss TT") );

知道系统在其字符串方法中是使用day-month还是month-day很方便,主要用于设置用户输入的顺序。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