Как создать объект даты из строки в javascript

С помощью этой строки 30/11/2011. Я хочу преобразовать его в объект даты.

Нужно ли использовать:

Date d = new Date(2011,11,30);   /* months 1..12? */

или

Date d = new Date(2011,10,30);   /* months 0..11? */

?

Ответ 1

var d = new Date(2011,10,30);

поскольку месяцы индексируются из 0 в js.

Ответ 2

Вы определенно хотите использовать второе выражение, поскольку месяцы в JS перечислены с 0.

Также вы можете использовать метод Date.parse, но он использует другой формат даты:

var d = Date.parse("11/30/2011");

Ответ 3

Синтаксис выглядит следующим образом:

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

Ответ 4

Существует несколько способов создания даты, как описано выше. Я бы не стал повторять то же самое. Вот небольшой метод преобразования 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;
}

Ответ 5

Очень просто:

var dt=new Date("2011/11/30");

Дата должна быть в формате ISO yyyy/MM/dd.

Ответ 6

Сначала извлеките строку, подобную этой

var dateString = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);

Затем

var d = new Date( dateString[3], dateString[2]-1, dateString[1] );

Ответ 7

Всегда, для любой проблемы, касающейся спецификации JavaScript на практике, я настоятельно рекомендую Mozilla Developer Network и их ссылка на JavaScript.

Как он указывает в тему объекта Date о используемом вами аргументе:

new Date(year, month, day [, hour, minute, second, millisecond ])

И о параметре months:

месяц Целочисленное значение, представляющее месяц, начиная с 0 для января до 11 декабря.

Ясно, что тогда вы должны использовать месяц 10 для ноября.

P.S.: Причина, по которой я рекомендую MDN, - это правильность, хорошее объяснение вещей, примеры и диаграмма совместимости браузеров.

Ответ 8

Не могу поверить, что 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).