Есть ли простое преобразование для этого формата даты и времени? - PullRequest
3 голосов
/ 28 февраля 2010

Я извлекаю данные из фида JSON, используя jQuery, и в качестве части фида я получаю атрибуты datetime, например «2009-07-01 07:30:09». Я хочу поместить эту информацию в javascript-объект Date для удобства использования, но я не верю, что объект Date распознал бы этот тип формата, если бы я просто подключил его к конструктору. Есть ли функция или, может быть, хитрый прием, который я могу использовать, чтобы быстро разбить этот формат на что-то, что объект Date может распознать и использовать?

Ответы [ 4 ]

3 голосов
/ 28 февраля 2010

Атрибут «date», который вы извлекаете из этого веб-сервиса, не является действительным Date, поскольку он не является распознанным форматом даты.

Самый простой способ обработать его как объект Date - заменить пустое пространство буквой "T":

var receivedDate = "2009-07-01 07:30:09";
var serializedDate = new Date(receivedDate.replace(" ", "T"));
alert(serializedDate);

Это не самый правильный вариант, поскольку он не обрабатывает часовые пояса, но в большинстве случаев будет работать.

3 голосов
/ 28 февраля 2010

См. это и это .

input = "2009-07-01 07:30:09";
var res =  input.match(/([\d\-]+) (\d+):(\d+):(\d+)/);
date = new Date(Date.parse(res[1])); 
date.setHours(res[2]);
date.setMinutes(res[3]);
date.setSeconds(res[4]);
console.log(date);

Редактировать: мой первоначальный ответ был

t = new Date(Date.parse("2009-07-01 07:30:09"));

, который не выдавал ни одной ошибки в chrome, но все равно неправильно анализировал дату. Это сбило меня с толку. Действительно, Date.parse выглядит довольно некорректно, и анализ полной даты и времени, вероятно, не очень надежен.

Edit2: DateJS представляется хорошим решением для случаев, когда необходим какой-то серьезный синтаксический анализ текста на сегодняшний день, но при 25 КБ он немного тяжел для случайного использования.

0 голосов
/ 28 февраля 2010

var str = "2009-07-01 07:30:09";

Это зависит от часового пояса, и если строка даты вычла 1 за месяц.

Если это время по Гринвичу, а 07 означает июль, а не август:

var str = "2009-07-01 07:30:09";

var d=new Date(), time;
str=str.split(/\D0?/);
str[1]-=1;
time=str.splice(3);
d.setUTCFullYear.apply(d,str);
d.setUTCHours.apply(d,time)
alert(d)

/ * возвращаемое значение: (дата) Ср 01 июля 2009 03:30:09 GMT-0400 (восточное дневное время) или местный эквивалент * /

0 голосов
/ 28 февраля 2010

Это может быть немного громоздко, но объект JavaScript Date будет принимать список аргументов YYYY, MM, DD, HH, MM, SS. Разобрать значение даты и передать его конструктору Date, например,

var splitDT= '2009-07-01 07:30:09'.split(' '); // ['2009-07-01','07:30:09']
var d= splitDT[0].split('-');
var t= splitDT[1].split(':');
alert( (new Date(d[0],d[1],d[2],t[0],t[1],t[2])) );       

Ба. Пришлось использовать вместо значений индекса массива. Да, это беспорядок. Но это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...