Следующий сценарий возвращается 20 вместо 21!
var d = new Date("2010/03/21");
document.write(d.getDate());
Что я делаю неправильно? Действительно ли это - ошибка JavaScript?
Метод 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
}
Если есть вероятность, что это обрабатывать строковый аргумент как UTC, а результирующий объект Date
- как местное время или наоборот? Это могло сбить его с толку. Сравните d.getDate ()
с d.getUTCDate ()
.
http://jsbin.com/aqoki3/edit - здесь с кодом, который вы разместили, я получаю 21
. Так что это не ошибка JS. Возможно, это ошибка в реализации вашего браузера (JS).
Чтобы правильно инициализировать переменную даты, используйте новую дату (год, месяц, дата [, час, минута, секунда, миллисекунда])
( https: // developer .mozilla.org / en / Core_JavaScript_1.5_Reference / Objects / Date ).
Таким образом вы будете уверены, что сегодня 21 день, поскольку вы неявно установили 21
Я тестировал этот код в Firefox 3.6 и IE 8:
<script type="text/javascript">
var d = new Date("2010/03/21");
document.write(d.getDate());
</script>
Он показывает правильную дату: 21
Для получения дополнительной информации посмотрите: Объект даты JavaScript
Вы также можете прочитать о аспектах совместимости JavaScript в Википедии.
Я получаю ту же дату (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"));
}
Вы не можете создать объект 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
Я написал следующий код в адресной строке своего браузера, и результат был 21
javascript:alert(new Date("2010/03/21").getDate())
Не существует такой вещи, как ошибка Javascript, поскольку существует множество реализаций Javascript, поэтому вы захотите сослаться на конкретная реализация.
Я тестировал реализацию Chrome 4.1.249. Что у вас?