2016-03-02 3 views
0

имеют проблему даты формата в JavaScript, это мой код функцииформат даты с помощью JavaScript

//originalDate = '2016-03-02 09:12:14.989522'; 
    var d = new Date(originalDate), 
     month = d.getMonth() + 1, 
     day =d.getDate(), 
     year = d.getFullYear(), 
     hour = d.getHours(), 
     min = d.getMinutes(); 
    alert([day, month, year].join('-')+' '+[hour,min].join(':')); 

и my original date ='2016-03-02 09:12:14.989522'; и мой код всегда return 'Nan-Nan-Nan Nan:Nan', он видел неизвестную originalDate, что я прохожу в. любая помощь?

Примечание: тип данных в базе данных даты шахты timestamp

+2

Код, который вы опубликовали, отлично работает, если «дата» определена правильно. Вероятно, вы не передаете правильную переменную в 'new Date (date)'. Если вы введете полный код, будет более очевидным, в чем проблема. –

+0

вы можете распечатать дату на консоли перед запуском этих операторов .. 'console.log (date);' – gurvinder372

+0

Я сомневаюсь, что 'new Date (date)' возвращает объект с датой даты. – Rayon

ответ

1

Простого решения: Заменить пространство в вашем date строки с «Т».

(Однако, чтобы быть полностью технически корректным, вы должны также включить индикатор конца часового пояса в конце, либо дополнительный «Z», чтобы указать UTC, то есть скоординированное универсальное время, или «+ hh: mm» или «- чч:. мм», чтобы указать смещение часового пояса)

MDN site for Date.parse() пишет:

из-за разницы в разборе строк даты, ... результаты противоречивы, особенно в различных реализациях ECMAScript где струнные например «2015-10-12 12:00:00», могут быть проанализированы как NaN, UTC или местный часовой пояс.

и

строки времени

Дата может быть в формате ISO 8601.

ISP 8601 specs упомянутых выше пишет:

форматы являются следующие. Точно здесь должны присутствовать компоненты, показанные здесь, именно с этой пунктуацией. Обратите внимание, что «Т» появляется буквально в строке, чтобы указать начало элемента времени, как указано в ISO 8601

и

полная дата плюс часы, минуты, секунды и десятичная дробь из второго YYYY-MM-ДДТчча: мм: ss.sTZD (например, 1997-07-16T19: 20: 30,45 + 01: 00)

Вот ваш код переписана заменив пространство date с «Т». Если это не работает в вашем браузере, добавьте «Z» или смещение часового пояса в конце date.

var date ='2016-03-02T09:12:14.989522'; 
 
var d = new Date(date), 
 
    month = d.getMonth() + 1, 
 
    day = d.getDate(), 
 
    year = d.getFullYear(), 
 
    hour = d.getHours(), 
 
    min = d.getMinutes(); 
 
document.write([day, month, year].join('-') + ' ' + [hour, min].join(':'));

+0

Спасибо @ Andrew, моя проблема решена вашим ответом. – ching

+0

Обратите внимание, что «просто добавление T» означает, что если строка успешно проанализирована, она будет рассматриваться как локальная дата, однако если «Z» как добавлено, она будет обрабатываться как UTC. Кроме того, если это дата только без часового пояса, она будет обрабатываться как UTC. В противном случае результатом будет недопустимая дата. Просто так ясно. :-) – RobG

1

Является ли параметр date в вашем коде Date объекта? Это не сработает. В Javascript нет такого конструктора. Вы могли бы использовать date.now().

Проверить здесь для действительных конструкторов для Datehttps://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date

+0

Нет, параметр 'date' - это код опроса, это строка, и она (почти) действительна. Прямая цитата с сайта, на который вы ссылались: 'var birthday = new Date ('1995-12-17T03: 24: 00');' где '' 1995-12-17T03: 24: 00'' часть dateString , См. Мой ответ об использовании «Т» в этой строке, хотя, похоже, это решение. –

0

Сначала разобрать исходную дату затем использовать его в коде.

var MilliSecond=Date.parse(originalDate); 
var d=new Date(MilliSecond), 
month=d.getMonth()+1, 
day=d.getDay(), ....... 
+0

В браузере, где dateString в исходном вопросе создает ошибку (например, мой браузер, то есть Firefox v44.0.2), использование 'Date.parse (date)' не решает проблему, то есть все равно производит 'NaN 'ошибки везде. –

+0

Вы указали свою первоначальную дату как // originalDate = '2016-03-02 09: 12: 14.989522'; Замените пространство между датой и временем буквой T, затем проанализируйте строку даты. например originalDate = '2016-03-02T09: 12: 14,989522'; –

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