Проаналізувати рядок DateTime у JavaScript


Відповіді:


140

Побачити:

Код:

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 ()
Джонатан Фінгленд

Якщо у вас є дата обидва ЧАСУ, такий: "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
Claudiu Creanga

Хтось ще вважає дивним, що йдеться про посилання статті 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

Відповідь не повинна покладатися на бібліотеку, яка не позначена або згадується в ОП. Використання jQuery як бібліотеки дат є масовою надмірністю, коли 3-рядова функція може виконати ту саму роботу.
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 кбіт gzipped. Зручний для розробників, але сповільнює роботу веб-сайту. Не варто.
Раптор

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'))
Герцог

+1 Для коментарів Duke щодо new Date(Date.parse('02.02.1999'))Javascript
Джек

Повертає NaN принаймні в двох поточних браузерах. Див. Чому Date.parse дає неправильні результати?
RobG

@ Duke new Date(Date.parse('02.02.1999'))- дасть однакові результати new Date('02.02.1999'), включаючи Недійсну дату в деяких браузерах. Використання вбудованого аналізатора - це, мабуть, найгірший спосіб розбору часової позначки.
RobG

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

Ну. Я не думаю, що ваш приклад нічим не відрізняється від того, який подав Мартін Штауфчик. Насправді його відповідь має додаткову логіку для обробки недійсних дат.
Сагар

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