Проаналізувати рядок 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.