Относительно JavaScript новые Date () и Date.parse () - PullRequest
16 голосов
/ 01 декабря 2010

Это мой код:

  var exampleDate='23-12-2010 23:12:00';  
  var date=new Date(exampleDate);//returns invalid Date
  var date1=Date.parse(exampleDate);//returns NAN

Я хочу преобразовать вышеуказанную строку в дату.Итак, я написал код, как вы видели выше.

Этот код работает нормально в IE и Opera, но переменная date возвращает мне недопустимую дату, а date1 возвращает NAN в mozilla Firefox, что мне делать?

Ответы [ 6 ]

25 голосов
/ 01 декабря 2010

Строка в вашем примере не соответствует ни одному из стандартных форматов, распознаваемых браузерами. Спецификация ECMAScript требует, чтобы браузеры могли анализировать только один стандартный формат:

Формат выглядит следующим образом: YYYY-MM-DDTHH:mm:ss.sssZ

Этот формат включает формы только для дат:

YYYY

YYYY-MM

YYYY-MM-DD

Он также включает в себя только временные формы с добавленным необязательным смещением часового пояса:

THH:mm

THH:mm:ss

THH:mm:ss.sss

Также включены «дата-время», которые могут быть любой комбинацией вышеперечисленного.

Если строка не соответствует этому формату, функция может вернуться к любому зависящие от реализации эвристики или специфичные для реализации форматы дат. Неузнаваемые строки или даты содержащий недопустимые значения элементов в формате String, заставляет Date.parse возвращать NaN.

Так что в вашем примере, использование 2010-12-23T23:12:00 - единственная строка, гарантированная для работы. На практике большинство браузеров также допускают даты в формате DD Month YYYY или Month DD, YYYY, поэтому строки типа 23 Dec 2010 и Dec 23, 2010 также могут работать.

6 голосов
/ 01 декабря 2010

Выше формат поддерживается только в IE и Chrome.

так что попробуйте с другими форматами. Ниже приведены некоторые форматы, поддерживающие браузеры.

<script type="text/javascript">

//var dateString = "03/20/2008";  // mm/dd/yyyy [IE, FF]

 var dateString = "2008/03/20";  // yyyy/mm/dd [IE, FF]
// var dateString = "03-20-2008";  // mm-dd-yyyy [IE, Chrome]
// var dateString = "March 20, 2008";  // mmmm dd, yyyy [IE, FF]
// var dateString = "Mar 20, 2008";  // mmm dd, yyyy [IE, FF]

// Initalize the Date object by passing the date string variable
var myDate = new Date(dateString);
alert(myDate); 
</script>
4 голосов
/ 01 декабря 2010

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

var parseDate = function(s) {
  var re = /^(\d\d)-(\d\d)-(\d{4}) (\d\d):(\d\d):(\d\d)$/;
  var m = re.exec(s);
  return m ? new Date(m[3], m[2]-1, m[1], m[4], m[5], m[6]) : null;
};
var dateStr = '23-12-2010 23:12:00';
parseDate(dateStr).toString(); //=> Thu Dec 23 2010 23:12:00 GMT-0800
2 голосов
/ 01 декабря 2010

JavaScript должен поддерживать преобразование как минимум из следующих строк:

* yyyy/MM/dd
* MM/dd/yyyy
* MMMM dd, yyyy
* MMM dd, yyyy

Попробуйте с:

  var exampleDate='12/23/2010 23:12:00';
  var date = new Date(exampleDate); 
1 голос
/ 01 декабря 2010

Используйте datejs и этот код:

var exampleDate='23-12-2010 23:12:00';
var myDate = Date.parseExact(exampleDate, 'dd-MM-yyyy hh:mm:ss');

myDate должен быть правильно построенным Date объектом.

0 голосов
/ 03 июня 2013

Просто используйте в этом формате:

var exampleDate='2010-12-23 23:12:00'; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...