Разница между датой (dateString) и новой датой (dateString) - PullRequest
49 голосов
/ 17 августа 2010

У меня есть код, который пытается проанализировать строку даты.

Когда я делаю alert(Date("2010-08-17 12:09:36")); Он правильно анализирует дату, и все работает нормально, но я не могу вызвать методы, связанные с Date, например getMonth().

Когда я пытаюсь:

var temp = new Date("2010-08-17 12:09:36");
alert(temp);

Я получаю ошибку "неверная дата".

Любые идеи о том, как проанализировать "2010-08-17 12:09:36" с новой датой ()?

Ответы [ 9 ]

59 голосов
/ 17 августа 2010

Дата ()

При этом вы вызываете функцию с именем Date().Он не принимает никаких аргументов и возвращает строку, представляющую текущую дату и время.

new Date ()

С этим вы создаете новый экземплярДата.

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

new Date() // current date and time
new Date(milliseconds) //milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)

Таким образом, использование 2010-08-17 12:09:36 в качестве параметра для конструктора запрещено.

См. w3schools.


РЕДАКТИРОВАТЬ: new Date(dateString) использует один из следующих форматов:

  • "13 октября 1975 11:13:00"
  • «13 октября 1975 года 11:13»
  • «13 октября 1975 года»
36 голосов
/ 12 декабря 2013

Следующий формат работает в всех браузерах:

new Date("2010/08/17 12:09:36");

Таким образом, чтобы сделать форматированную строку даты в формате yyyy-mm-dd hh:mm:ss полностью совместимой с браузером, необходимо заменить тире косыми чертами:

var dateString = "2010-08-17 12:09:36";
new Date(dateString.replace(/-/g, "/"));
4 голосов
/ 07 апреля 2014

Я знаю, что это старый, но гораздо проще просто использовать

var temp = new Date("2010-08-17T12:09:36");
3 голосов
/ 17 августа 2010

Разница в том, что (если я помню из документации ECMA) заключается в том, что Date("xx") не создает (в некотором смысле) новый объект даты (на самом деле это эквивалентно вызову (new Date("xx").toString()). Хотя new Date("xx") фактически создаст новый объект даты.

Для получения дополнительной информации:

Посмотрите на 15.9.2 из http://www.ecma -international.org / публикации / файлы / ECMA-ST/ECMA-262.pdf

2 голосов
/ 17 февраля 2016

Любые идеи о том, как анализировать "2010-08-17 12:09:36" с новой датой ()?

До ES5 не было никакого строкового формата, в котором бы браузеры былитребуется поддержка, хотя есть ряд, которые широко поддерживаются.Однако поддержка браузера ненадежна и противоречива, например, некоторые допускают значения за пределами границ, а другие нет, некоторые поддерживают определенные форматы, а другие нет и т. Д.

В ES5 появилась поддержка некоторых форматов ISO 8601, однако OPне совместим с ISO 8601, и не все используемые браузеры его поддерживают в любом случае.

Единственный надежный способ - использовать небольшую функцию синтаксического анализа.Далее анализируется формат в OP, а также проверяются значения.

/* Parse date string in format yyyy-mm-dd hh:mm:ss
** If string contains out of bounds values, an invalid date is returned
** 
** @param {string} s - string to parse, e.g. "2010-08-17 12:09:36"
**                     treated as "local" date and time
** @returns {Date}   - Date instance created from parsed string
*/
function parseDateString(s) {
  var b = s.split(/\D/);
  var d = new Date(b[0], --b[1], b[2], b[3], b[4], b[5]);
  return d && d.getMonth() == b[1] && d.getHours() == b[3] &&
         d.getMinutes() == b[4]? d : new Date(NaN);
}
  
document.write(
  parseDateString('2010-08-17 12:09:36') + '<br>' +  // Valid values
  parseDateString('2010-08-45 12:09:36')             // Out of bounds date
);
1 голос
/ 17 августа 2010

Правильные способы использования Дата: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

Кроме того, следующий фрагмент кода показывает, как с помощью одного определения функции «Животное» он может быть a) вызван напрямую и b) созданрассматривая его как функцию конструктора

function Animal(){
    this.abc = 1;
    return 1234; 
}

var x = new Animal();
var y = Animal();

console.log(x); //prints object containing property abc set to value 1
console.log(y); // prints 1234
0 голосов
/ 31 декабря 2013

У меня была та же проблема с использованием вызова API, который отвечал в формате ISO 8601. Работая в Chrome, это сработало: `

// date variable from an api all in ISO 8601 format yyyy-mm-dd hh:mm:ss
  var date = oDate['events']['event'][0]['start_time'];
  var eventDate = new Date();
  var outputDate = eventDate.toDateString();

`

но это не сработало с Firefox.

Приведенный выше ответ помог мне правильно отформатировать его для firefox:

 // date variable from an api all in ISO 8601 format yyyy-mm-dd hh:mm:ss
 var date = oDate['events']['event'][0]['start_time'];
 var eventDate = new Date(date.replace(/-/g,"/");
 var outputDate = eventDate.toDateString();
0 голосов
/ 22 ноября 2013

Я недавно столкнулся с этим, и это был полезный пост.Я продвинул вышеупомянутый Topera на шаг вперед, и это работает для меня и в chrome, и в firefox:

var temp = new Date(  Date("2010-08-17 12:09:36")   );
alert(temp);

внутренний вызов Date() возвращает строку, которую new Date() может проанализировать.

0 голосов
/ 17 августа 2010

Вы не получаете ошибку «неверная дата». Скорее, значение temp равно «Неверная дата».

Ваша строка даты в правильном формате? Если вы используете Firefox, отметьте Date.parse

В консоли JavaScript Firefox:

>>> Date.parse("2010-08-17 12:09:36");
NaN
>>> Date.parse("Aug 9, 1995")
807944400000

Я бы попробовал другой формат строки даты.

Зеби, вы используете Internet Explorer?

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