Разобрать строку DateTime в JavaScript


Ответы:


139

Увидеть:

Код:

var strDate = "03.09.1979";
var dateParts = strDate.split(".");

var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);

ммм, а как проверить, что strDate имеет недопустимое значение вроде «30.30.2000»?
Доктор Но

2
@ user674887, вы можете сравнить значения после синтаксического анализа. например dateParts [1] -1 == date.getMonth ()
Джонатан Фингленд

Если у вас есть дата как TIME, так: "2014-05-20T16: 43: 56.71-06: 00" var partesFecha = solicitud.CreatedDate.split ("T") [0] .split ("-"); var createdDate = новая дата (partesFecha [0], (partesFecha [1] - 1), partesFecha [2]); Дата первого извлечения до T, а затем - год, месяц и день.
RolandoCC

не могу поверить, что вам нужно использовать разделение, чтобы получить ожидаемый формат даты в javascript
Клаудиу Крянга,

Кому-нибудь еще покажется странным, что в справочной статье Mozilla об объекте Date говорится "Note: parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies."?
NanoWizard

51

Если вы используете пользовательский интерфейс jQuery, вы можете отформатировать любую дату с помощью:

<html>
    <body>
        Your date formated: <span id="date1"></span><br/>
    </body>
</html>

 

var myDate = '30.11.2011';
var parsedDate = $.datepicker.parseDate('dd.mm.yy', myDate);

$('#date1').text($.datepicker.formatDate('M d, yy', parsedDate));

http://jsfiddle.net/mescalito2345/ND2Qg/14/


21
+1 Я не считаю, что это полностью выходит за рамки, JavaScript и JQuery - обычная комбинация.
djna

Ответ не должен полагаться на библиотеку, которая не помечена или не упомянута в OP. Использование jQuery в качестве библиотеки дат является огромным излишеством, когда трехстрочная функция может выполнять ту же работу.
RobG

9

Мы используем этот код, чтобы проверить, является ли строка действительной датой

var dt = new Date(txtDate.value)
if (isNaN(dt))

данный формат не соответствует формату, требуемому developer.mozilla.org/en/Core_JavaScript_1.5_Reference/… (и, таким образом, этого конструктора Date будет недостаточно)
Джонатан Фингланд,

Это вообще не проверяет действительные даты, а просто проверяет, может ли конструктор Date сделать действительную дату из ввода. Это не одно и то же.
RobG

6

ссылки: http://momentjs.com/docs/#/parsing/string/

Если вы используете moment.js, вы можете использовать режим "строка" + "формат"

moment(String, String);
moment(String, String, String);
moment(String, String, Boolean);
moment(String, String, String, Boolean);

пример:

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

2
В большинстве случаев MomentJS является излишним, поскольку для использования чистого JavaScript требуются всего лишь сотни байтов, в то время как MomentJS составляет 12,4 КБ в сжатом виде. Удобно для разработчиков, но замедляет работу сайта. Не стоит.
Raptor

3

Я использовал следующий код в IE. (Совместимость с IE8)

var dString = "2013.2.4";
var myDate = new Date( dString.replace(/(\d+)\.(\d+)\.(\d+)/,"$2/$3/$1") );
alert( "my date:"+ myDate );


2

Использовать объект Date:

var time = Date.parse('02.02.1999');
document.writeln(time);

Дайте: 917902800000


16
new Date(Date.parse('02.02.1999'))
Duke

+1 За комментарии Duke new Date(Date.parse('02.02.1999'))к Javascript
Джек

Возвращает NaN как минимум в двух текущих браузерах. См. Почему Date.parse дает неверные результаты?
RobG 07

@ Duke - new Date(Date.parse('02.02.1999'))выдаст результаты, идентичные new Date('02.02.1999'), в том числе неверную дату в некоторых браузерах. Использование встроенного синтаксического анализатора, возможно, является худшим способом синтаксического анализа метки времени.
RobG 07

2

Эта функция также обрабатывает недопустимую дату 29.2.2001.

function parseDate(str) {
    var dateParts = str.split(".");
    if (dateParts.length != 3)
        return null;
    var year = dateParts[2];
    var month = dateParts[1];
    var day = dateParts[0];

    if (isNaN(day) || isNaN(month) || isNaN(year))
        return null;

    var result = new Date(year, (month - 1), day);
    if (result == null)
        return null;
    if (result.getDate() != day)
        return null;
    if (result.getMonth() != (month - 1))
        return null;
    if (result.getFullYear() != year)
        return null;

    return result;
}

0

Вы можете отформатировать дату просто сделав этот тип кода. В javascript.

 // for eg.
              var inputdate=document.getElementById("getdate").value);
                 var datecomp= inputdate.split('.');

                Var Date= new Date(datecomp[2], datecomp[1]-1, datecomp[0]); 
                 //new date( Year,Month,Date)

Вы должны использовать javascript, а не jquery, поскольку тега jquery нет
Сагар

счастлив ... смысл только понять Senario
Bachas

Что ж. Я не думаю, что ваш пример чем-то отличается от того, что дал Мартин Штауфчик. Фактически, в его ответе есть дополнительная логика для обработки недопустимых дат.
Sagar

Мартин Штауфчик справляется с теми условиями, которых обычно не бывает. Можете ли вы дать мне какой-нибудь календарь, который может стать недействительным. Почему мы должны писать такой длинный код, когда мы можем обрабатывать короткие пути. Было бы намного лучше, если бы Мартин Штауфчик также предоставил для обработки дату и время для обработки.
Bachas
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.