Подтвердить что ты не робот

Разница между датой (dateString) и новой датой (dateString)

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

Когда я делаю 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" с новой Date()?

4b9b3361

Ответ 1

Date()

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

новая дата()

С этим вы создаете новый экземпляр 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.


EDIT: new Date(dateString) использует один из следующих форматов:

  • "13 октября 1975 г. 11:13:00"
  • "13 октября 1975 г. 11:13"
  • "13 октября 1975 г.

Ответ 2

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

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, "/"));

Ответ 3

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

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

Посмотрите на 15.9.2 из http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

Ответ 4

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

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

Ответ 5

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

Кроме того, следующий фрагмент кода показывает, как с помощью одного определения функции "Animal" он может быть 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

Ответ 6

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

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

Ответ 7

Ошибка получения недопустимой даты. Скорее, значение temp - "Недопустимая дата".

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

В Firefox javascript консоли:

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

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

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

Ответ 8

У меня была такая же проблема, используя вызов 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();

Ответ 9

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

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

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