แยกวิเคราะห์สตริง DateTime ใน JavaScript


95

ไม่มีใครรู้วิธีแยกวิเคราะห์สตริงวันที่ในรูปแบบที่ต้องการdd.mm.yyyy?


คุณต้องการสร้างวัตถุวันที่ใหม่จากสตริงในรูปแบบนั้นหรือไม่?
Kieran Hall

คำตอบ:


139

ดู:

รหัส:

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

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

mmm แต่วิธีตรวจสอบ strDate มีค่าไม่ถูกต้องเช่น "30.30.2000"?
นพ. โน

2
@ user674887 คุณสามารถเปรียบเทียบค่าหลังจากแยกวิเคราะห์ เช่น dateParts [1] -1 == date.getMonth ()
Jonathan Fingland

หากคุณมีวันที่ทั้ง 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
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 UI คุณสามารถจัดรูปแบบวันที่ใดก็ได้ด้วย:

<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เป็นไลบรารีวันที่เป็นการ overkill จำนวนมากเมื่อฟังก์ชัน 3 บรรทัดสามารถทำงานเดียวกันได้
RobG

9

เราใช้รหัสนี้เพื่อตรวจสอบว่าสตริงเป็นวันที่ที่ถูกต้องหรือไม่

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

รูปแบบที่กำหนดไม่ตรงกับรูปแบบที่developer.mozilla.org/en/Core_JavaScript_1.5_Reference/… (ดังนั้นตัวสร้างวันที่จะไม่เพียงพอ)
Jonathan Fingland

นั่นไม่ได้ทดสอบวันที่ที่ถูกต้องเลยเพียงแค่ทดสอบว่าตัวสร้างวันที่สามารถสร้างวันที่ที่ถูกต้องจากอินพุตได้หรือไม่ ทั้งสองไม่ใช่สิ่งเดียวกัน
RobG

7

อ้างอิง: http://momentjs.com/docs/#/parsing/string/

หากคุณใช้ moment.js คุณสามารถใช้โหมด "string" + "format"

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.4kb gzipped สะดวกสำหรับนักพัฒนา แต่ทำให้เว็บไซต์ช้าลง ไม่คุ้ม
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

ใช้วัตถุวันที่:

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
Jack

ส่งคืน NaN ในเบราว์เซอร์ปัจจุบันอย่างน้อยสองเบราว์เซอร์ ดูเหตุใด Date.parse จึงให้ผลลัพธ์ที่ไม่ถูกต้อง
RobG

@ Duke— new Date(Date.parse('02.02.1999'))จะให้ผลลัพธ์ที่เหมือนกันnew Date('02.02.1999')รวมทั้งInvalid Dateในบางเบราว์เซอร์ การใช้โปรแกรมแยกวิเคราะห์ในตัวเป็นวิธีที่แย่ที่สุดในการแยกวิเคราะห์การประทับเวลา
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

คุณสามารถจัดรูปแบบวันที่เพียงแค่สร้างรหัสประเภทนี้ในจาวาสคริปต์

 // 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
Sagar

มีความสุข ... ความหมายคือแค่เข้าใจ senario
Bachas

ดี. ฉันไม่คิดว่าตัวอย่างของคุณจะแตกต่างไปจากที่ Martin Staufcik ให้ไว้ ในความเป็นจริงคำตอบของเขามีเหตุผลเพิ่มเติมในการจัดการวันที่ไม่ถูกต้อง
Sagar

Martin Staufcik จัดการกับเงื่อนไขเหล่านั้นซึ่งไม่ได้เกิดขึ้นโดยทั่วไป คุณสามารถให้ปฏิทินที่สามารถให้ข้อมูลที่ไม่ถูกต้องได้ไหมทำไมเราควรเขียนโค้ดยาว ๆ ในเมื่อเราสามารถจัดการได้ในทางสั้น ๆ ฉันจะดีกว่านี้มากถ้า Martin Staufcik ยังให้เวลาจัดการกับวันที่
Bachas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.