С помощью этой строки 30/11/2011
. Я хочу преобразовать его в объект даты.
Нужно ли использовать:
Date d = new Date(2011,11,30); /* months 1..12? */
или
Date d = new Date(2011,10,30); /* months 0..11? */
?
С помощью этой строки 30/11/2011
. Я хочу преобразовать его в объект даты.
Нужно ли использовать:
Date d = new Date(2011,11,30); /* months 1..12? */
или
Date d = new Date(2011,10,30); /* months 0..11? */
?
var d = new Date(2011,10,30);
поскольку месяцы индексируются из 0 в js.
Вы определенно хотите использовать второе выражение, поскольку месяцы в JS перечислены с 0.
Также вы можете использовать метод Date.parse, но он использует другой формат даты:
var d = Date.parse("11/30/2011");
Синтаксис выглядит следующим образом:
new Date(year, month, day [, hour, minute, second, millisecond ])
так
Date d = new Date(2011,10,30);
правильно; час, минута, секунда, миллисекунда являются необязательными.
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date
Существует несколько способов создания даты, как описано выше. Я бы не стал повторять то же самое. Вот небольшой метод преобразования String в Date в Java Script, если это то, что вы ищете,
function compareDate(str1){
// str1 format should be dd/mm/yyyy. Separator can be anything e.g. / or -. It wont effect
var dt1 = parseInt(str1.substring(0,2));
var mon1 = parseInt(str1.substring(3,5));
var yr1 = parseInt(str1.substring(6,10));
var date1 = new Date(yr1, mon1-1, dt1);
return date1;
}
Очень просто:
var dt=new Date("2011/11/30");
Дата должна быть в формате ISO yyyy/MM/dd.
Сначала извлеките строку, подобную этой
var dateString = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
Затем
var d = new Date( dateString[3], dateString[2]-1, dateString[1] );
Всегда, для любой проблемы, касающейся спецификации JavaScript на практике, я настоятельно рекомендую Mozilla Developer Network и их ссылка на JavaScript.
Как он указывает в тему объекта Date о используемом вами аргументе:
new Date(year, month, day [, hour, minute, second, millisecond ])
И о параметре months:
месяц Целочисленное значение, представляющее месяц, начиная с 0 для января до 11 декабря.
Ясно, что тогда вы должны использовать месяц 10 для ноября.
P.S.: Причина, по которой я рекомендую MDN, - это правильность, хорошее объяснение вещей, примеры и диаграмма совместимости браузеров.
Не могу поверить, что javascript не согласуется с датами синтаксического анализа. И я слышу по умолчанию, когда часовой пояс не изменится с UTC на локальный - надеюсь, что веб подготовлен;)
Я предпочитаю, чтобы Javascript делал тяжелую работу, когда дело доходило до парсинга. Однако было бы неплохо обработать проблему локального часового пояса достаточно прозрачно. С учетом этих двух соображений, здесь есть функция сделать это с текущим статус-кво - и когда Javascript изменится, он все равно будет работать, но затем может быть удален (с небольшим временем для людей, чтобы догнать старые браузеры /nodejs конечно).
function strToDate(dateStr)
{
var dateTry = new Date(dateStr);
if (!dateTry.getTime())
{
throw new Exception("Bad Date! dateStr: " + dateStr);
}
var tz = dateStr.trim().match(/(Z)|([+-](\d{2})\:?(\d{2}))$/);
if (!tz)
{
var newTzOffset = dateTry.getTimezoneOffset() / 60;
var newSignStr = (newTzOffset >= 0) ? '-' : '+';
var newTz = newSignStr + ('0' + Math.abs(newTzOffset)).slice(-2) + ':00';
dateStr = dateStr.trim() + newTz;
dateTry = new Date(dateStr);
if (!dateTry.getTime())
{
throw new Exception("Bad Date! dateStr: " + dateStr);
}
}
return dateTry;
}
Нам нужен объект даты независимо; поэтому createone. Если есть часовой пояс, мы закончили. В противном случае создайте локальную строку часового пояса, используя формат + hh: mm (более приемлемый, чем + hhmm).