Как форматировать JavaScript Date с учетом культуры браузера? - PullRequest
2 голосов
/ 12 декабря 2011

Мне нужно отформатировать объект JavaScript Date.Он должен отображать дату и время в коротком формате с учетом культуры, используемой браузером, например:

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

Как мне это сделать (предпочтительно с jQuery)?

Ответы [ 3 ]

4 голосов
/ 12 декабря 2011

Объект 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") );
3 голосов
/ 12 декабря 2011

Полезно знать, использует ли система день-месяц или месяц-день в своих строковых методах, главным образом, для установки порядка ввода данных пользователем.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
3 голосов
/ 12 декабря 2011

Браузеры либо используют системные настройки для форматов даты, либо используют свои собственные (часто ориентированные на США) настройки.

Существует метод Date.prototype.toLocaleDateString () , который должен возвращатьдата основана на текущих настройках системы, однако зависит от реализации и совершенно ненадежна из-за несовместимости между браузерами.

например, для меня 13 декабря 2011 года:

  1. Safari возвращает 13 December 2001
  2. Firefox 12/13/2011
  3. Опера Tuesday December 13, 2011
  4. Хром Tuesday, December 13, 2011
  5. IE 6 Tuesday, 13 December, 2011

Таким образом, только Safari и IE на самом деле используют системные настройки, кажется, что разработчики других браузеров слишком ленивы, безразличны или невежественны, чтобы приспособиться к пользователям из других стран.

Альтернативой является либо спросить пользователя, какой формат он предпочитает, либо просто использовать недвусмысленный формат, например, 13 декабря 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('-');
}
...