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

94

Кто-нибудь знает, как разобрать строку даты в требуемом формате dd.mm.yyyy?

Азат
источник
Вы хотите создать новый объект даты из строки в этом формате?
Киран Холл

Ответы:

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/

Mecalito
источник
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 );
user3444722
источник
2

Разработчики ASP.NET могут выбрать эту удобную встроенную программу (MS JS должен быть включен на страницу):

var date = Date.parseLocale('20-Mar-2012', 'dd-MMM-yyyy');

http://msdn.microsoft.com/en-us/library/bb397521%28v=vs.100%29.aspx

Мэтью Миллман
источник
OP не упоминает, что использует ASP.NET
Raptor
2

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

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

Дайте: 917902800000

HotJard
источник
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