JavaScript не будет анализировать формат даты / времени по Гринвичу - PullRequest
2 голосов
/ 21 августа 2009

Я пытаюсь заставить JavaScript анализировать формат даты и времени для меня, с возможной целью сообщить мне дни, прошедшие с этой даты и время прямо сейчас (локально).

К сожалению, формат даты, с которым мне приходится работать (это из ответа JSON, который я не могу контролировать), возвращает его в формате типа 2008-10-01 06:21:43.

var thedate = "2008-10-01 06:21:43";
var inmillisecs = new Date(thedate);

Это просто возвращает ошибку из JavaScript, сообщающую, что дата недействительна.

Как мне обойти эту проблему?

Ответы [ 6 ]

8 голосов
/ 21 августа 2009

Это должно сделать это

function dateFromUTC( dateAsString, ymdDelimiter )
{
  var pattern = new RegExp( "(\\d{4})" + ymdDelimiter + "(\\d{2})" + ymdDelimiter + "(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})" );
  var parts = dateAsString.match( pattern );

  return new Date( Date.UTC(
      parseInt( parts[1] )
    , parseInt( parts[2], 10 ) - 1
    , parseInt( parts[3], 10 )
    , parseInt( parts[4], 10 )
    , parseInt( parts[5], 10 )
    , parseInt( parts[6], 10 )
    , 0
  ));
}

alert( dateFromUTC( "2008-10-01 06:21:43", '-' ) );
3 голосов
/ 21 августа 2009

Есть эта красивая библиотека под названием DateJS . У меня нет опыта с этим, но вы могли бы найти это полезным. Я думаю, что вы будете особенно заинтересованы в parse() и / или parseExact().

Я первоначально слышал об этом из этого ТАК сообщения .

Приветствие.

РЕДАКТИРОВАТЬ: Я только что заметил ваше упоминание о времени, и я не уверен, что DateJS обрабатывает время, поэтому я собираюсь изучить это очень быстро, иначе вы можете просто проигнорировать этот пост

2 голосов
/ 21 августа 2009

Ожидаемый формат - американский формат: m/d/yyyy hh:mm:ss

var date1 = new Date("2008-10-01 06:21:43"); //fails
var date2 = new Date("10/1/2008 06:21:43"); //works correctly
1 голос
/ 21 августа 2009

Это дата ISO 9601 - с ними приятно работать. Попробуйте просто использовать его с помощью регулярных выражений:

(\d{4})-(\d{2})-(\d{2})[ tT](.*)

до

\2/\3/\1 \4
0 голосов
/ 21 августа 2009

это должна быть строка, которая распознается функцией parse ().

http://www.devguru.com/technologies/javascript/10585.asp посмотрите на параметр dateString

0 голосов
/ 21 августа 2009

Правильный синтаксис должен быть:

    var thedate = "Oct 1, 2008 06:21:43";
    var inmillisecs = new Date(thedate);

Вы должны предпринять некоторые шаги для преобразования получаемой строки в формат, который я показал. Использование американского формата также работает

   var thedate = "10/1/2008 06:21:42";
   var inmillisecs = new Date(thedate);
...