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

Как разбирать строчную строку даты dd/mm/yyyy или dd-mm-yyyy или dd-mmm-yyyy с использованием JavaScript или jQuery

Возможный дубликат:
Расширение Date.parse JavaScript для разрешения DD/MM/YYYY (даты, не отформатированные в США)?
Преобразовать строку dd-mm-yyyy на сегодняшний день

Введите дату в текстовое поле, например: 05/09/1985, и я хочу преобразовать его в формат 05-сентябрь-1985 (dd-MMM-yyyy). Как я могу это достичь? Обратите внимание: формат источника может быть dd-mm-yyyy или dd/mm/yyyy или dd-mmm-yyyy.

Фрагмент кода:

 function GetDateFormat(controlName) {
        if ($('#' + controlName).val() != "") {      
            var d1 = Date.parse($('#' + controlName).val());
            if (d1 == null) {
                alert('Date Invalid.');
                $('#' + controlName).val("");
            }
                var array = d1.toString('dd-MMM-yyyy');
                $('#' + controlName).val(array);
        }
    }

Этот код возвращается с 09 мая по 1985 год, но я хочу 05-сентябрь-1985. Спасибо.

4b9b3361

Ответ 1

Возможно, вы захотите использовать вспомогательную библиотеку, например http://momentjs.com/, которая обертывает собственный объект даты javascript для упрощения манипуляций

Затем вы можете делать такие вещи, как:

var day = moment("12-25-1995", "MM-DD-YYYY");

или

var day = moment("25/12/1995", "DD/MM/YYYY");

то работайте с датой

day.add('days', 7)

и получить собственную дату javascript

day.toDate();

Ответ 2

Обновление

Ниже вы сказали:

Извините, я не могу предсказать формат даты раньше, он должен быть как dd-mm-yyyy или dd/mm/yyyy или dd-mmm-yyyy format, наконец, я хотел преобразовать весь этот формат в dd-MMM-yyyy формат.

Этот полностью изменяет вопрос. Это будет намного сложнее, если вы не сможете контролировать формат. В JavaScript нет ничего, что позволит вам указать формат даты. Официально единственный формат даты, поддерживаемый JavaScript, - это упрощенная версия ISO-8601: yyyy-mm-dd, хотя практически все браузеры также поддерживают yyyy/mm/dd. Но кроме этого, вы должны сами написать код или (и это имеет смысл) использовать хорошую библиотеку. Я бы, вероятно, использовал библиотеку, например moment.js или DateJS (хотя DateJS не поддерживался в годах).


Оригинальный ответ:

Если формат всегда dd/mm/yyyy, это тривиально:

var parts = str.split("/");
var dt = new Date(parseInt(parts[2], 10),
                  parseInt(parts[1], 10) - 1,
                  parseInt(parts[0], 10));

split разделяет строку на заданном разделителе. Затем мы используем parseInt для преобразования строк в числа, и мы используем конструктор new Date для построения Date из этих частей: третьей частью будет год, вторая часть месяца, а первая часть - день. Date использует номера месяца, основанные на нулевом значении, и поэтому мы должны вычесть один из числа месяца.

Ответ 3

Date.parse распознает только определенные форматы, и у вас нет возможности сообщить ему, что такое формат ввода. В этом случае он считает, что вход находится в формате mm/dd/yyyy, поэтому результат неправильный.

Чтобы исправить это, вам нужно либо самостоятельно разобрать вход (например, String.split), а затем вручную построить объект Date или использовать более полнофункциональную библиотеку, такую ​​как datejs.

Пример для ручного разбора:

var input = $('#' + controlName).val();
var parts = str.split("/");
var d1 = new Date(Number(parts[2]), Number(parts[1]) - 1, Number(parts[0]));

Пример использования date.js:

var input = $('#' + controlName).val();
var d1 = Date.parseExact(input, "d/M/yyyy");

Ответ 4

Попробуйте следующее:

 function GetDateFormat(controlName) {
        if ($('#' + controlName).val() != "") {      
            var d1 = Date.parse($('#' + controlName).val().toString().replace(/([0-9]+)\/([0-9]+)/,'$2/$1'));
            if (d1 == null) {
                alert('Date Invalid.');
                $('#' + controlName).val("");
            }
                var array = d1.toString('dd-MMM-yyyy');
                $('#' + controlName).val(array);
        }
    }

RegExp заменит .replace(/([0-9]+)\/([0-9]+)/,'$2/$1') изменить день/месяц.