2013-08-02 2 views
7

Как заголовок спрашивает, является ли выход Date.toString() (точнее, Date.toTimeString()) всегда в одном формате во всех браузерах?Является ли вывод Date.toString() всегда в том же формате?

Я спрашиваю об этом, так как EMCAScript specification говорит, что «содержимое строки зависит от реализации».


мне нужно, чтобы убедиться в этом, потому что мне нужно форматировать строку, вставляя HTML span элементы следующим образом:

(new Date()).toTimeString().replace(" GMT", "<span id='offset'> GMT") + '</span>');

Это будет производить (в Google Chrome v28.0.1500.95) что-то вроде

18:19:26<span id="offset"> GMT-0700 (Pacific Daylight Time)</span>

, который я могу тогда стиль с помощью CSS.


Предложения по лучшим способам стилизации результатов также будут замечательными!

+2

У вас уже есть ответ! Это зависит от реализации, как вы упомянули. Поэтому я предлагаю вам не писать код, основанный на результатах текущей реализации. – Mics

+0

Хотя я опаздываю, чтобы ответить на этот вопрос, я остану свои комментарии на благо других, которые приходят на этот вопрос, чтобы получить ответ: - Спецификация понятна. Он гласит: «Содержимое String из toString() зависит от реализации» (см. Ecma-international.org/ecma-262/5.1/#sec-15.9.5.2). Если вам нужно указать дату, то лучше альтернатива является использование toISOString(), которое согласно спецификации строго «YYYY-MM-DDTHH: mm: ss.sssZ» отформатировано. (Refer: ecma-international.org/ecma-262/5.1/#sec-15.9.5.43) –

ответ

3

Вкратце, нет, toString не всегда выводит один и тот же формат.

new Date().toString() 

печатает

  • "Сб 11 февраля 2012 2:15:10 GMT + 0100" в Firefox 10
  • «Сб 11 февраля 2012 2:18:29 GMT + 0100 (W. Европа Standard Time)»в Chrome 16
  • "сб 11 февраля 2:18:59 UTC + 0100 2012" в Internet Explorer 9

Я знаю, что это старая версия браузера, но это показывает, что чело ser зависимым.

Однако при использовании toTimeString() оказывается его всегда начинается с часы: минуты: секунды [пробел] ...

Таким образом, вы могли бы вместо того, чтобы разбить строку на 2 части на основе первого [пространства] с:

indexOf(" ")

Затем завернуть вторую часть с пролетом

Moment делает некоторые строки форматирования дат, но он также не обрабатывает ваш запрос ed offset очень хорошо, так как это зависит от метода toString().

Я надеюсь, что помогает

+0

Спасибо за подробный ответ. Возможно, я буду создавать свой собственный формат даты в JavaScript; Moment.js немного слишком тяжелый (некоторые функции, которые я, вероятно, не буду использовать). –

+1

Спецификация понятна об этом. Он гласит: «Содержимое строки из toString() зависит от реализации» (см. Http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5.2) Если вы придется строчить дату, тогда лучшей альтернативой является использование toISOString(), которое согласно спецификации строго «YYYY-MM-DDTHH: mm: ss.sssZ» отформатировано. (См .: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.5.43) –

-1

Moment.js хорошая библиотека для форматирования даты в JS. https://github.com/moment/moment

В противном случае, вы в конечном итоге разобрали бы его, поскольку браузеры отображают это по-другому.

Смежные вопросы