ตรวจสอบว่าสตริงเป็นค่าวันที่หรือไม่


207

เป็นวิธีที่ง่ายในการตรวจสอบว่าค่าเป็นวันที่ที่ถูกต้องรูปแบบวันที่รู้จักใด ๆ ที่ได้รับอนุญาต

เช่นฉันมีค่า10-11-2009, 10/11/2009, 2009-11-10T07:00:00+0000ที่ทุกคนควรจะได้รับการยอมรับว่าเป็นค่าวันและค่า200, 10, 350ซึ่งไม่ควรจะได้รับการยอมรับเป็นค่าวันที่ วิธีที่ง่ายที่สุดในการตรวจสอบคืออะไรถ้าเป็นไปได้? เพราะการประทับเวลาก็จะได้รับอนุญาต


คำตอบ:


41

จะDate.parse()พอเพียง?

ดูหน้าเอกสาร MDN ที่เกี่ยวข้อง


24
โปรดใช้ความระมัดระวังเนื่องจากจะยังคงส่งคืนสินค้าสำหรับวันที่ไม่ถูกต้องในเดือนกุมภาพันธ์เช่น: 2013-02-31
leojh

58
อีกเหตุผลที่ควรระวัง - ตัวเลขแยกเป็นวันที่ เป็นDate.parse("4.3") 986270400000
Mogsdad

ฉันลองเล่นซอกับทั้งสองกรณี 'ข้อควรระวัง' ด้านบน: console.log (Date.parse ("2013-02-31")); console.log (Date.parse ( "4.3")); และในทั้งสองกรณี (ใน firefox) มันคืน NaN ดังนั้นสำหรับฉัน Date.parse ดูเหมือนว่าตกลง (ฉันกำลังประเมินความยาวของเส้นประ
Cloudranger

55
ขออภัย @Asmor นี่ไม่ใช่คำตอบที่ถูกต้อง Date.parse จะวิเคราะห์สตริงใด ๆ ด้วยตัวเลขใน
jwerre

11
Date.parse ("My Name 8") มาเป็น 99662040000 ซึ่งผิด ฉันใช้สิ่งนี้และตอนนี้ต้องทนทุกข์ทรมาน
Rohith

250

อัปเดตปี 2558

มันเป็นคำถามเก่า แต่มีคำถามใหม่ ๆ เช่น:

ถูกปิดเหมือนรายการที่ซ้ำกันดังนั้นฉันคิดว่ามันสำคัญที่จะเพิ่มข้อมูลใหม่ที่นี่ ฉันเขียนเพราะฉันกลัวว่าคนอื่น ๆ จะคัดลอกและวางรหัสที่โพสต์ไว้ที่นี่และใช้มันเพื่อการผลิต

ส่วนใหญ่คำตอบที่นี่ทั้งใช้บางส่วนแสดงออกปกติที่ซับซ้อนที่ตรงกับรูปแบบเพียงบางส่วนเท่านั้นที่เฉพาะเจาะจงมากและจริงทำมันไม่ถูกต้อง (เช่นการจับคู่ที่ 32 มกราคมในขณะที่ไม่ตรงกับวันที่ ISO ที่เกิดขึ้นจริงตามที่โฆษณา - ดูการสาธิต ) หรือที่พวกเขาพยายามที่จะผ่านอะไรกับDateคอนสตรัคและ ขอให้ดีที่สุด

ใช้ช่วงเวลา

ดังที่ฉันอธิบายไว้ในคำตอบนี้ขณะนี้มีห้องสมุดสำหรับสิ่งนั้น: Moment.js

มันเป็นห้องสมุดที่จะแยกวิเคราะห์ตรวจสอบจัดการและแสดงวันที่ใน JavaScript ที่มี API ที่สมบูรณ์ยิ่งกว่าฟังก์ชั่นการจัดการวันที่ JavaScript มาตรฐาน

มันลดขนาด 12kB / gzipped และทำงานใน Node.js และสถานที่อื่น ๆ :

bower install moment --save # bower
npm install moment --save   # npm
Install-Package Moment.js   # NuGet
spm install moment --save   # spm
meteor add momentjs:moment  # meteor

การใช้ช่วงเวลาคุณสามารถเจาะจงมากเกี่ยวกับการตรวจสอบวันที่ที่ถูกต้อง บางครั้งมันเป็นสิ่งสำคัญมากที่จะเพิ่มเบาะแสบางอย่างเกี่ยวกับรูปแบบที่คุณคาดหวัง ตัวอย่างเช่นวันเช่น 06/22/2015 ดูเหมือนวันที่ที่ถูกต้องเว้นแต่ว่าคุณจะใช้รูปแบบ DD / MM / YYYY ซึ่งในกรณีนี้วันที่ควรถูกปฏิเสธว่าไม่ถูกต้อง มีหลายวิธีที่คุณสามารถบอก Moment ว่าคุณคาดหวังรูปแบบใดเช่น:

moment("06/22/2015", "MM/DD/YYYY", true).isValid(); // true
moment("06/22/2015", "DD/MM/YYYY", true).isValid(); // false

trueอาร์กิวเมนต์เป็นมีดังนั้นช่วงเวลาจะไม่พยายามที่จะแยกอินพุตถ้ามันไม่ได้ว่าสอดคล้องกับหนึ่งในรูปแบบที่ให้ไว้ (มันควรจะเป็นพฤติกรรมเริ่มต้นในความคิดของฉัน)

คุณสามารถใช้รูปแบบที่จัดให้ภายใน:

moment("2015-06-22T13:17:21+0000", moment.ISO_8601, true).isValid(); // true

และคุณสามารถใช้หลายรูปแบบเป็นอาร์เรย์:

var formats = [
    moment.ISO_8601,
    "MM/DD/YYYY  :)  HH*mm*ss"
];
moment("2015-06-22T13:17:21+0000", formats, true).isValid(); // true
moment("06/22/2015  :)  13*17*21", formats, true).isValid(); // true
moment("06/22/2015  :(  13*17*21", formats, true).isValid(); // false

ดู: DEMO

ห้องสมุดอื่น ๆ

หากคุณไม่ต้องการใช้ Moment.js ก็มีห้องสมุดอื่นด้วย:

อัพเดทปี 2016

ฉันสร้างimmomentโมดูลที่เป็นเหมือน (ส่วนหนึ่งของ) ช่วงเวลา แต่ไม่มีความผิดที่เกิดจากการกลายพันธุ์ของวัตถุที่มีอยู่ (ดูเอกสารสำหรับข้อมูลเพิ่มเติม)

อัพเดต 2018

วันนี้ฉันแนะนำให้ใช้Luxonสำหรับการจัดการวันที่ / เวลาแทน Moment ซึ่ง (ไม่เหมือนกับ Moment) ทำให้วัตถุไม่เปลี่ยนรูปทั้งหมดดังนั้นจึงไม่มีความประหลาดใจที่น่ารังเกียจเกี่ยวกับการกลายพันธุ์โดยอ้อมของวันที่

ข้อมูลเพิ่มเติม

ดูสิ่งนี้ด้วย:

ชุดบทความโดย Rob Gravelle ในห้องสมุดแยกวิเคราะห์วันที่ของ JavaScript:

บรรทัดล่าง

แน่นอนว่าทุกคนสามารถลองปรับแต่งวงล้อเขียนนิพจน์ปกติ (แต่โปรดอ่าน ISO 8601 และ RFC 3339 ก่อนที่คุณจะทำจริง ๆ ) หรือโทรหา buit-in constructors ที่มีข้อมูลแบบสุ่มเพื่อแยกวิเคราะห์ข้อความผิดพลาดเช่น'Invalid Date'(คุณแน่ใจหรือไม่ว่าข้อความนี้เหมือนกันทุกแพลตฟอร์มในทุกพื้นที่หรือไม่ในอนาคต?) หรือคุณสามารถใช้โซลูชันที่ทดสอบแล้วและใช้เวลาของคุณในการปรับปรุงไม่ต้องบูรณาการซ้ำ ไลบรารีทั้งหมดที่ระบุในที่นี้เป็นซอฟต์แวร์โอเพนซอร์ซ


4
หนึ่งควรใช้สิ่งนี้ว่าอย่างไร ผลตอบแทนmoment("whatever 123").isValid() true
krivar

4
@ krivar จะใช้แบบนี้ดีที่สุด: moment("06/22/2015", "DD/MM/YYYY", true).isValid();ด้วยรูปแบบวันที่ที่คาดไว้อย่างชัดเจนและมีอาร์กิวเมนต์trueหมายถึงการตรวจสอบที่เข้มงวด ฉันอัพเดตคำตอบด้วยข้อมูลเพิ่มเติมและตัวอย่างที่ดีกว่า
rsp

2
แม้ว่าเดียวกัน แต่ผมตรวจสอบการป้อนข้อมูลของผู้ใช้และผมไม่ทราบว่ารูปแบบวันที่คาดว่าจะ ...
แจนแวนเดอร์ Haegen

3
@JanVanderHaegen หากสามารถสันนิษฐานได้ว่า 3/4/5 เป็นวันที่ที่ถูกต้องและเป็นวันที่ 1 เมษายน 2015 ฉันขอแนะนำให้เพิ่มรูปแบบเหล่านั้น (และอาจมากกว่า) ลงในรายการรูปแบบที่สนับสนุนอย่างชัดเจน โปรดทราบว่า 3/4/5 ที่คุณกล่าวถึงนั้นไม่ชัดเจนโดยไม่มีรูปแบบที่ชัดเจน
rsp

3
นี่อาจเป็นคำตอบที่ดีที่สุดและได้รับการดูแลเป็นอย่างดีที่ฉันเห็นใน SO
Phil3992

63

นี่คือวิธีที่ฉันแก้ไขปัญหานี้ในแอพที่ฉันกำลังทำงานอยู่ในขณะนี้:

อัปเดตตามข้อเสนอแนะจาก krillgar:

var isDate = function(date) {
    return (new Date(date) !== "Invalid Date") && !isNaN(new Date(date));
}

5
ฉันต้องการส่งคืน (วันที่ใหม่ (วันที่)) toString ()! == "วันที่ไม่ถูกต้อง" สำหรับโหนด โปรดทราบด้วยว่า จริง: เท็จซ้ำซ้อน เพียงแค่คืนค่าการแสดงออกจะเพียงพอที่นี่
domenukk

ใน IE8 new Date(date)ไม่ให้ 'วันที่ไม่ถูกต้อง'
krillgar

13
นี่ไม่ใช่คำตอบที่ดี new Date(date) !== "Invalid Date"จะคืนค่าจริงเสมอเนื่องจากนิพจน์ทางซ้ายจะคืนค่าวัตถุวันที่ที่มีช่วงเวลาของNaNซึ่งไม่สามารถเป็นสตริงได้ ใช้"งาน" เนื่องจากการแปลงประเภท แต่เนื่องจากการแยกสตริงของวันที่ยังคงขึ้นอยู่กับการใช้งานส่วนใหญ่ขึ้นอยู่กับมันเพื่อแยกรูปแบบสุ่มเรามีข้อบกพร่องอย่างจริงจัง =====
RobG

4
ใหม่ Date ("469") ผลลัพธ์ใน Tue Jan 01 469 00:00:00 GMT + 0200 (EET)
Dan Ochiana

3
นี่คล้ายกับคำตอบที่ถูกต้องซึ่งเป็นเท็จยอมรับ isDate('Mac OS X 10.14.2')ผลตอบแทนจริงที่นี่
BradStell

24

new Date(date) === 'Invalid Date'ใช้งานได้เฉพาะใน Firefox และ Chrome IE8 (อันที่ฉันมีในเครื่องเพื่อการทดสอบ) ให้ NaN

ตามที่ระบุไว้ในคำตอบที่ได้รับการยอมรับDate.parse(date)ก็จะทำงานสำหรับตัวเลข เพื่อให้ได้สิ่งนั้นคุณสามารถตรวจสอบได้ว่ามันไม่ใช่ตัวเลข (ถ้านั่นคือสิ่งที่คุณต้องการยืนยัน)

var parsedDate = Date.parse(date);

// You want to check again for !isNaN(parsedDate) here because Dates can be converted
// to numbers, but a failed Date parse will not.
if (isNaN(date) && !isNaN(parsedDate)) {
    /* do your work */
}

2
ฉันรู้ว่าสองสามปีต่อมา แต่isNanไม่ใช่ฟังก์ชั่น กรณีที่ไม่ถูกต้องในอินสแตนซ์แรก
ทิมลูอิส

ไม่ทำงาน, ไม่เป็นผล. ถ้าdateเป็นFoostreet 1เช่นนั้นสภาพของคุณจะได้รับการประเมินว่าเป็นจริง
Fabian Picone

9

แล้วเรื่องแบบนี้ล่ะ? มันจะทดสอบว่ามันเป็นวัตถุวันที่หรือสตริงวันที่:

function isDate(value) {
    var dateFormat;
    if (toString.call(value) === '[object Date]') {
        return true;
    }
    if (typeof value.replace === 'function') {
        value.replace(/^\s+|\s+$/gm, '');
    }
    dateFormat = /(^\d{1,4}[\.|\\/|-]\d{1,2}[\.|\\/|-]\d{1,4})(\s*(?:0?[1-9]:[0-5]|1(?=[012])\d:[0-5])\d\s*[ap]m)?$/;
    return dateFormat.test(value);
}

ฉันควรพูดถึงว่านี่ไม่ได้ทดสอบสตริงที่จัดรูปแบบ ISO แต่ถ้าใช้ RegExp มากกว่านี้คุณก็ควรจะทำงานได้ดีขึ้น


7

ไม่มีคำตอบใด ๆ ที่นี่ในการตรวจสอบว่าวันที่ไม่ถูกต้องเช่นวันที่ 31 กุมภาพันธ์ฟังก์ชั่นนี้อยู่ที่โดยการตรวจสอบว่าเดือนที่ส่งคืนจะเทียบเท่ากับเดือนเดิมและทำให้แน่ใจว่ามีการแสดงปีที่ถูกต้อง

//expected input dd/mm/yyyy or dd.mm.yyyy or dd-mm-yyyy
function isValidDate(s) {
  var separators = ['\\.', '\\-', '\\/'];
  var bits = s.split(new RegExp(separators.join('|'), 'g'));
  var d = new Date(bits[2], bits[1] - 1, bits[0]);
  return d.getFullYear() == bits[2] && d.getMonth() + 1 == bits[1];
} 

เนื่องจากคำถามไม่ได้ตรวจสอบว่าสตริงเป็นวันที่ 'ถูกต้อง' แต่เพียงตรวจสอบว่าสตริงเป็นรูปแบบวันที่หรือไม่
Thizzer

@ จุดดี Thizzer ฉันจะไม่รังเกียจการแก้ไข แต่ในการอ่านคำถามของคุณฉันนิ่งงันเพราะคุณบอกว่า 10 ไม่ควรตรวจสอบ แต่ควรอนุญาตให้ประทับเวลา
ykay พูดว่า Reinstate Monica

xD ไม่ได้สังเกตด้วยซ้ำว่าคำถามจากวันก่อนหน้าของฉันที่มีวันที่ / เวลาประทับ ฉันจะพยายามแก้ไขคำถามในวันนี้
Thizzer

ทำไมต้องใช้ month-1 และ month + 1
Kapil Raghuwanshi

@KapilRaghuwanshi วันที่จาวาสคริปต์ใช้เดือนที่เป็นศูนย์ดังนั้นคุณต้องลบ 1 เพื่อสร้างวันที่เหมาะสมและเพิ่ม 1 เพื่อตรวจสอบว่าเทียบเท่ากับเดือนเดิมหรือไม่
ykay พูดว่า Reinstate Monica

5

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

isDate('2018-08-01T18:30:00.000Z');

isDate(_date){
        const _regExp  = new RegExp('^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?(Z)?$');
        return _regExp.test(_date);
    }

4

โดยอ้างถึงความคิดเห็นทั้งหมดข้างต้นฉันได้มาแก้ปัญหา

สิ่งนี้จะทำงานได้หากการDateส่งผ่านอยู่ในรูปแบบ ISO หรือจำเป็นต้องจัดการกับรูปแบบอื่น

var isISO = "2018-08-01T18:30:00.000Z";

if (new Date(isISO) !== "Invalid Date" && !isNaN(new Date(isISO))) {
    if(isISO == new Date(isISO).toISOString()) {
        console.log("Valid date");
    } else {
        console.log("Invalid date");
    }
} else {
    console.log("Invalid date");
}

คุณสามารถเล่นที่นี่บน JSFiddle


1
โซลูชันนี้ทำงานได้ดีที่สุดสำหรับฉันเนื่องจากสตริงวันที่ที่แอพสนับสนุนของฉันอยู่ในรูปแบบYYYY-MM-DDดังนั้นจึงเป็นเรื่องเล็กน้อยที่จะแนบT00:00:00.000Zและใช้โซลูชันนี้เพื่อตรวจสอบสตริงที่ถูกต้อง
เร่ง

สำหรับจาวาสคริปต์นั้นใช้งานได้ แต่จะใช้ใน typescript ได้อย่างไร?
แซ่

3

นี่คือฟังก์ชั่นที่ได้รับการปรับปรุงซึ่งใช้เพียงDate.parse():

function isDate(s) {
    if(isNaN(s) && !isNaN(Date.parse(s)))
        return true;
    else return false;
}

หมายเหตุ: Date.parse () จะแจงตัวเลข: ตัวอย่างเช่นDate.parse(1)จะส่งคืนวันที่ ดังนั้นที่นี่เราตรวจสอบว่าsไม่ใช่ตัวเลขถ้าเป็นวันที่


1
สิ่งนี้ไม่ทำงานเมื่อผ่าน 'การทดสอบ 2' จะผ่านเป็นวันที่จริง ทดสอบใน Chrome รุ่นล่าสุด
user1751287

2

ฉันจะทำสิ่งนี้

var myDateStr= new Date("2015/5/2");

if( ! isNaN ( myDateStr.getMonth() )) {
    console.log("Valid date");
}
else {
    console.log("Invalid date");
}

เล่นที่นี่


2
สิ่งนี้ใช้ไม่ได้กับ Chrome ปัจจุบันเบราว์เซอร์อื่นอาจเป็นไปได้ ฉันเปลี่ยนสตริงที่ให้EXAMPLE STRING 12345และมันจะคืนค่า "วันที่ที่ถูกต้อง"

1

นี่คือรุ่นที่เรียบง่าย

var isDate = function (date) {
    return!!(function(d){return(d!=='Invalid Date'&&!isNaN(d))})(new Date(date));
}

1
ยังใช้งานไม่ได้กับตัวอย่างของฉัน:isDate("  1")
Tomas

@ Tom คุณควรตรวจสอบว่าค่ามีอักขระ white-space หรือไม่ก่อนที่จะพิจารณาว่าเป็นวันที่หรือไม่ ปัญหาของคุณเป็นกรณีพิเศษซึ่งต้องได้รับการจัดการโดยตรรกะคอนโทรลเลอร์ของคุณ
นาย Polywhirl

1
ไม่ควรตรวจสอบตัวอักษร white space เนื่องจากสตริงที่ 1 มกราคม 2020 เป็นวันที่ที่ถูกต้องซึ่งมี white space วิธีการของคุณไม่ได้บัญชีสำหรับสิ่งนี้
Kirstin Walsh

1

ฟังก์ชัน callable นี้ทำงานได้อย่างสมบูรณ์และคืนค่าจริงสำหรับวันที่ที่ถูกต้อง ให้แน่ใจว่าได้โทรโดยใช้วันที่ในรูปแบบ ISO (yyyy-mm-dd หรือ yyyy / mm / dd):

function validateDate(isoDate) {

    if (isNaN(Date.parse(isoDate))) {
        return false;
    } else {
        if (isoDate != (new Date(isoDate)).toISOString().substr(0,10)) {
            return false;
        }
    }
    return true;
}

1
เป็นเรื่องดี แต่ไม่ตอบคำถามอย่างสมบูรณ์ โดยเฉพาะจะไม่ทำงานสำหรับ '2009-11-10T07: 00: 00 + 0000' ซึ่งเป็นหนึ่งในตัวอย่างที่ให้มา
ดาน

อย่าคิดว่ามันจะทำงานได้อย่างถูกต้องเพราะ validateDate ('2016-12-30T08: 00: 00.000Z') // false
Jose Browne

ไม่ว่าจะใช้งานได้หรือไม่ก็สามารถทำให้ง่ายขึ้นได้return !isNaN(Date.parse(isoDate)) || isoDate == new Date(isoDate).toISOString().substr(0,10);
Michel Jung

1

ฉันรู้ว่ามันเป็นคำถามเก่า แต่ฉันพบปัญหาเดียวกันและเห็นว่าไม่มีคำตอบใดที่ทำงานอย่างถูกต้องโดยเฉพาะการกำจัดตัวเลข (1,200,345 ฯลฯ ) จากวันที่ซึ่งเป็นคำถามเดิม นี่เป็นวิธีที่ค่อนข้างแหกคอกที่ฉันคิดได้และมันก็ใช้ได้ กรุณาชี้ให้เห็นว่ามีหลายกรณีที่มันจะล้มเหลว

if(sDate.toString() == parseInt(sDate).toString()) return false;

นี่คือบรรทัดสำหรับกำจัดหมายเลข ดังนั้นฟังก์ชั่นทั้งหมดอาจมีลักษณะดังนี้:

function isDate(sDate) {  
  if(sDate.toString() == parseInt(sDate).toString()) return false; 
  var tryDate = new Date(sDate);
  return (tryDate && tryDate.toString() != "NaN" && tryDate != "Invalid Date");  
}

console.log("100", isDate(100));
console.log("234", isDate("234"));
console.log("hello", isDate("hello"));
console.log("25 Feb 2018", isDate("25 Feb 2018"));
console.log("2009-11-10T07:00:00+0000", isDate("2009-11-10T07:00:00+0000"));


1
console.log("hello 1 ", isDate("hello 1 "));ผลตอบแทนจริง
John

คุณพูดถูก! คุณมีทางออกหรือไม่? จนถึงตอนนี้ฉันคิดว่าไม่มีคำตอบที่นี่จริง ๆ ตอบคำถามอย่างเหมาะสม!
peekolo

"100%" เป็นเปอร์เซ็นต์จะให้ผลตอบแทนจริง
toddmo

0

มันเป็นเรื่องปกติหรือไม่ที่จะตรวจสอบว่ามีฟังก์ชั่น Date ที่เกี่ยวข้องสำหรับวัตถุที่ค้นหาว่าเป็นวัตถุ Date หรือไม่?

ชอบ

var l = new Date();
var isDate = (l.getDate !== undefined) ? true; false;

0

นี่คือวิธีที่ฉันท้ายทำ สิ่งนี้จะไม่ครอบคลุมทุกรูปแบบ คุณต้องปรับเปลี่ยนให้เหมาะสม ฉันมีการควบคุมรูปแบบดังนั้นจึงเหมาะกับฉัน

function isValidDate(s) {
            var dt = "";
            var bits = [];
            if (s && s.length >= 6) {
                if (s.indexOf("/") > -1) {
                    bits = s.split("/");
                }
                else if (s.indexOf("-") > -1) {
                    bits = s.split("-");
                }
                else if (s.indexOf(".") > -1) {
                    bits = s.split(".");
                }
                try {
                    dt = new Date(bits[2], bits[0] - 1, bits[1]);
                } catch (e) {
                    return false;
                }
                return (dt.getMonth() + 1) === parseInt(bits[0]);
            } else {
                return false;
            }
        }

-1

ตกลงนี่เป็นคำถามเก่า แต่ฉันพบวิธีแก้ไขปัญหาอื่นขณะตรวจสอบโซลูชันที่นี่ สำหรับฉันทำงานเพื่อตรวจสอบว่าฟังก์ชั่น getTime () มีอยู่ที่วัตถุวันที่:

const checkDate = new Date(dateString);

if (typeof checkDate.getTime !== 'function') {
  return;
}

-1

document.getElementById('r1').innerHTML = dayjs('sdsdsd').isValid()

document.getElementById('r2').innerHTML = dayjs('2/6/20').isValid()
<script src="https://unpkg.com/dayjs@1.8.21/dayjs.min.js"></script>

<p>'sdsdsd' is a date: <span id="r1"></span></p>
<p>'2/6/20' is a date: <span id="r2"></span></p>

น้ำหนักเบาห้องสมุดพร้อมสำหรับคุณ: Day.js


1
นี่คือโฆษณาบน StackOverflow โดยเฉพาะอย่าทำเช่นนั้น
c4sh

-4
SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
sdf.setLenient(false);

โดยค่าเริ่มต้นนี้ถูกตั้งค่าเป็น TRUE ดังนั้นแม้แต่สตริงที่มีรูปแบบที่ไม่ถูกต้องก็ให้ผลตอบแทนที่ดี

ฉันได้ใช้มันอย่างนี้:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
formatter.setLenient(false);
String value = "1990/13/23"; 

try {
      Date date = formatter.parse(value);
      System.out.println(date);
    }catch (ParseException e) 
  {
    System.out.println("its bad");
  }

5
... จาวาสคริปต์ ?!
artparks

-5

ลองสิ่งนี้:

if (var date = new Date(yourDateString)) {
    // if you get here then you have a valid date       
}

6
สิ่งนี้ไม่ได้ผลสำหรับฉัน ก่อนอื่น var ในเงื่อนไขไม่ได้แยกวิเคราะห์ แต่ถ้าคุณลบออกแล้วลองดังนี้: if (date = new Date ("ขยะ")) {alert (date); } แม้ว่าวันที่จะเป็นขยะการแจ้งเตือนจะยังคงดำเนินการในขณะที่ฟังก์ชั่นวันที่จะส่งกลับ "วันที่ไม่ถูกต้อง" (ใน Firefox อย่างน้อย) เพื่อให้สภาพการประเมินเป็นจริง ฉันเดาว่าเบราว์เซอร์บางตัวกลับมาว่างเปล่าในวันที่ไม่ถูกต้องมันจะใช้ได้กับเบราว์เซอร์เหล่านั้น อาจมีความไม่สอดคล้องกันของเบราว์เซอร์ที่นี่
Cloudranger
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.