Вопрос по javascript, date, jquery, asp.net – как проанализировать строку даты в формате «дд / мм / гггг», «дд-мм-гггг» или «дд-ммм-гггг», используя JavaScript или jQuery [duplicate]

38

Possible Duplicate:
Extending JavaScript's Date.parse to allow for DD/MM/YYYY (non-US formatted dates)?
Convert dd-mm-yyyy string to date

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

Code Snippet:

<code> 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);
        }
    }
</code>

Этот код возвращается09-May-1985 но я хочу05-Sep-1985, Благодарю.

Ваш Ответ

5   ответов
0

http://blog.stevenlevithan.com/archives/date-time-format

Вы можете сделать что-нибудь с датой.

файл :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
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
8

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");
Error: User Rate Limit Exceeded Sharanamma Jekeen
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
41

Update

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

Sorry, i can't predict date format before, it should be like dd-mm-yyyy or dd/mm/yyyy or dd-mmm-yyyy format finally i wanted to convert all this format to dd-MMM-yyyy format.

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

Original answer:

Если форматalways 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 использует номера месяцев, начинающиеся с нуля, и поэтому мы должны вычесть одно из номера месяца.

Error: User Rate Limit Exceeded Sharanamma Jekeen
Error: User Rate Limit Exceeded Sharanamma Jekeen
Error: User Rate Limit ExceededcompletelyError: User Rate Limit Exceeded
3

 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') изменить день / месяц положение.

Error: User Rate Limit ExceededRegEx.
54

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();

Похожие вопросы