2010-02-27 7 views
3

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

+0

Вам действительно нужно работать с датами в вашем javascript-коде? Если вы этого не сделаете, вы можете просто оставить строку такой, какой она есть. –

+0

Да, это похоже на формат, который даже когда объект Date пытается его проанализировать, он не распознает. Учитывая, что фактическое имя свойства «datetime» и Googling, которое вызывает много ссылок MS и VB, я собираюсь предположить, что это какая-то временная метка VB или .NET. –

+0

И да, я знаю. Мне нужно сравнить дату времени запроса с каналом JSON год назад с того времени.Я знаю, что я могу просто разбирать строку вручную, но я надеялся на то, что вы будете готово и проще. –

ответ

3

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

Самый простой способ справиться с этим, как объект Дата будет заменить пустое пространство с «Т»:

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

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

+0

Я пробовал это, но по какой-то причине это не сработает. Пространство остается пространством. –

+0

Nevermind, он работает. Я был в предположении, что replace() влияет на строку, на которую она вызвана, а не на то, что она возвращает результат замены. Не уверен, какой язык может/делает это, но я знаю, что есть некоторые, а иногда я смешиваю вещи от языка к языку. –

3

См. this и this.

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); 

Edit: Мой первоначальный ответ был

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

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

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

+0

@anshul> Это работает для вас? – bdl

+0

Просто протестированный в firefox, я получаю «Недействительная дата». –

+0

Nope. Пробовал делать ... $ ('# date'). Html (t.getMonth() + '/' + t.getDay()); NaN/NaN –

0

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

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])));  

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

0

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

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

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

уаг ул = «2009-07-01 7: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) 

/* Возвращаемое значение: (Дата) ср 1 июля 2009 3:30:09 GMT-0400 (по восточному поясному времени) или местного equivilent */

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