getDate JavaScript возвращает неправильную дату

Следующий сценарий возвращается 20 вместо 21!

var d = new Date("2010/03/21");
document.write(d.getDate());

Что я делаю неправильно? Действительно ли это - ошибка JavaScript?

46
задан Michael Petrotta 21 March 2010 в 20:54
поделиться

7 ответов

Метод Date.parse зависит от реализации ( новая дата (строка) эквивалентна Date.parse (строка) ).

Хотя этот формат будет доступен в современных браузерах, вы не можете быть на 100% уверены, что браузер будет интерпретировать именно ваш желаемый формат.

Я бы порекомендовал вам управлять своей строкой и использовать конструктор Date с аргументами года, месяца и дня:

// parse a date in yyyy-mm-dd format
function parseDate(input) {
  var parts = input.match(/(\d+)/g);
  // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}
51
ответ дан 26 November 2019 в 20:19
поделиться

Если есть вероятность, что это обрабатывать строковый аргумент как UTC, а результирующий объект Date - как местное время или наоборот? Это могло сбить его с толку. Сравните d.getDate () с d.getUTCDate () .

15
ответ дан 26 November 2019 в 20:19
поделиться

http://jsbin.com/aqoki3/edit - здесь с кодом, который вы разместили, я получаю 21 . Так что это не ошибка JS. Возможно, это ошибка в реализации вашего браузера (JS).
Чтобы правильно инициализировать переменную даты, используйте новую дату (год, месяц, дата [, час, минута, секунда, миллисекунда]) ( https: // developer .mozilla.org / en / Core_JavaScript_1.5_Reference / Objects / Date ). Таким образом вы будете уверены, что сегодня 21 день, поскольку вы неявно установили 21

0
ответ дан 26 November 2019 в 20:19
поделиться

Я тестировал этот код в Firefox 3.6 и IE 8:

<script type="text/javascript">

var d = new Date("2010/03/21");
document.write(d.getDate());

</script> 

Он показывает правильную дату: 21

Для получения дополнительной информации посмотрите: Объект даты JavaScript

Вы также можете прочитать о аспектах совместимости JavaScript в Википедии.

1
ответ дан 26 November 2019 в 20:19
поделиться

Я получаю ту же дату (21) в firfox, safari, chrome, opera и IE, использую ли я строку «2010 / 21.03 »или целочисленные аргументы даты (2010,2,21).

Я использую Windows-машину и новые версии браузеров -

вы можете проверить, анализирует ли ваш клиент дату, отличную от строки, это единственное место, где я вижу проблему .

if(new Date("2010/03/21")- new Date(2010,2,21)){
alert(new Date("2010/03/21"));
} 
0
ответ дан 26 November 2019 в 20:19
поделиться

Вы не можете создать объект Date, передав строковый аргумент, показывает like date.

Создайте следующим образом.

var str_date = "2010/03/21";
var date = new Date();
var date_elements = str_date.split("/");

date.setYear(date_elements[0]);
date.setMonth(date_elements[1]);
date.setDay(date_elements[2]);

alert(date.toString);

обратите внимание на метод date.toString. он возвращает полную дату String. date.getDate даст вам только день этого дня.

для получения дополнительной информации об объекте Date см. www.w3school.com

-3
ответ дан 26 November 2019 в 20:19
поделиться

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

javascript:alert(new Date("2010/03/21").getDate())

Не существует такой вещи, как ошибка Javascript, поскольку существует множество реализаций Javascript, поэтому вы захотите сослаться на конкретная реализация.

Я тестировал реализацию Chrome 4.1.249. Что у вас?

2
ответ дан 26 November 2019 в 20:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: