Как разбирать строчную строку даты 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. Спасибо.
Ответы
Ответ 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')
изменить день/месяц.
Ответ 5
Смотрите http://blog.stevenlevithan.com/archives/date-time-format
вы можете делать все с датой.
file: http://stevenlevithan.com/assets/misc/date.format.js
добавьте это в свой html-код с помощью тега script, и для его использования вы можете использовать его как:
var now = new Date();
now.format("m/dd/yy");
// Returns, e.g., 6/09/07