dashed-date.js (5019B)
1 // SKIP test262 export 2 // Behavior is not currently specified. 3 4 const tests = [ 5 // ==== Date only ==== 6 7 // dd-MMM-yyyy 8 ["24-Apr-2023", "2023-04-24T00:00:00"], 9 ["24-apr-2023", "2023-04-24T00:00:00"], 10 ["24-April-2023", "2023-04-24T00:00:00"], 11 ["24-APRIL-2023", "2023-04-24T00:00:00"], 12 ["24-Apr-2033", "2033-04-24T00:00:00"], 13 14 // dd-MMM-yy 15 ["24-Apr-23", "2023-04-24T00:00:00"], 16 ["24-Apr-33", "2033-04-24T00:00:00"], 17 18 // dd-MMM-yyy 19 ["24-Apr-023", "2023-04-24T00:00:00"], 20 21 // MMM-dd-yyyy 22 ["Apr-24-2023", "2023-04-24T00:00:00"], 23 ["apr-24-2023", "2023-04-24T00:00:00"], 24 ["April-24-2023", "2023-04-24T00:00:00"], 25 ["APRIL-24-2023", "2023-04-24T00:00:00"], 26 ["Apr-24-2033", "2033-04-24T00:00:00"], 27 28 // Year should get fixed up even with leading 0s 29 ["Apr-24-23", "2023-04-24T00:00:00"], 30 ["Apr-24-0023", "2023-04-24T00:00:00"], 31 ["24-Apr-0023", "2023-04-24T00:00:00"], 32 ["24-Apr-00023", "2023-04-24T00:00:00"], 33 ["24-Apr-000023", "2023-04-24T00:00:00"], 34 35 // MMM-dd-yy 36 ["Apr-24-23", "2023-04-24T00:00:00"], 37 ["Apr-24-33", "2033-04-24T00:00:00"], 38 39 // MMM-dd-yyy 40 ["Apr-24-023", "2023-04-24T00:00:00"], 41 42 // yyyy-MM-dd 43 ["2023-Apr-24", "2023-04-24T00:00:00"], 44 ["2033-Apr-24", "2033-04-24T00:00:00"], 45 46 // yy-MM-dd 47 ["33-Apr-24", "2033-04-24T00:00:00"], 48 49 // yyy-MM-dd 50 ["033-Apr-24", "2033-04-24T00:00:00"], 51 52 // ==== Date followed by hour and TZ ==== 53 54 ["24-Apr-2023 12:34:56", "2023-04-24T12:34:56"], 55 ["24-Apr-2023 (Mon) 12:34:56", "2023-04-24T12:34:56"], 56 ["24-Apr-2023(Mon)12:34:56", "2023-04-24T12:34:56"], 57 58 ["24-Apr-2023,12:34:56", "2023-04-24T12:34:56"], 59 60 ["24-Apr-2023 12:34:56 GMT", "2023-04-24T12:34:56Z"], 61 ["24-Apr-2023 12:34:56 +04", "2023-04-24T12:34:56+04:00"], 62 ["24-Apr-2023 12:34:56 +04:30", "2023-04-24T12:34:56+04:30"], 63 ["24-Apr-2023 12:34:56 -04", "2023-04-24T12:34:56-04:00"], 64 ["24-Apr-2023 12:34:56 -04:30", "2023-04-24T12:34:56-04:30"], 65 66 ["24-Apr-2023 GMT", "2023-04-24T00:00:00Z"], 67 ["24-Apr-2023GMT", "2023-04-24T00:00:00Z"], 68 ["24-Apr-2023GMT-04", "2023-04-24T00:00:00-04:00"], 69 ["24-Apr-2023GMT-04:30", "2023-04-24T00:00:00-04:30"], 70 ["24-Apr-2023GMT+04", "2023-04-24T00:00:00+04:00"], 71 ["24-Apr-2023GMT+04:30", "2023-04-24T00:00:00+04:30"], 72 73 ["24-Apr-2023,GMT", "2023-04-24T00:00:00Z"], 74 ["24-Apr-2023/GMT", "2023-04-24T00:00:00Z"], 75 76 ["24-Apr-2023/12:34:56", "2023-04-24T12:34:56"], 77 78 ["Apr-24-2023 12:34:56", "2023-04-24T12:34:56"], 79 ["Apr-24-2023 12:34:56 GMT", "2023-04-24T12:34:56Z"], 80 ["Apr-24-2023 12:34:56 +04", "2023-04-24T12:34:56+04:00"], 81 ["Apr-24-2023 12:34:56 +04:30", "2023-04-24T12:34:56+04:30"], 82 83 // ==== non dd-MMM-yyyy. Uses fallback path ==== 84 85 // Extra delimiter. 86 ["24-Apr- 2023", "2023-04-24T00:00:00"], 87 ["24-Apr -2023", "-002023-04-24T00:00:00"], 88 ["24- Apr-2023", "-002023-04-24T00:00:00"], 89 ["24 -Apr-2023", "-002023-04-24T00:00:00"], 90 91 ["24-Apr-/2023", "2023-04-24T00:00:00"], 92 ["24-Apr/-2023", "-002023-04-24T00:00:00"], 93 ["24-/Apr-2023", "-002023-04-24T00:00:00"], 94 ["24/-Apr-2023", "-002023-04-24T00:00:00"], 95 96 ["24-Apr-()2023", "2023-04-24T00:00:00"], 97 ["24-Apr()-2023", "-002023-04-24T00:00:00"], 98 ["24-()Apr-2023", "-002023-04-24T00:00:00"], 99 ["24()-Apr-2023", "-002023-04-24T00:00:00"], 100 101 // mday being 3+ digits 102 ["024-Apr-2023", "-002023-04-24T00:00:00"], 103 ["0024-Apr-2023", "-002023-04-24T00:00:00"], 104 105 // year w/ 5 or 6 digits 106 ["24-Apr-10000", "+010000-04-24T00:00:00"], 107 ["24-Apr-10000 10:00", "+010000-04-24T10:00:00"], 108 ["24-Apr-275760", "+275760-04-24T00:00:00"], 109 110 // Delimiter other than space after prefix 111 ["24-Apr-2312.10:13:14", "2312-04-24T10:13:14"], 112 ["24-Apr-2312,10:13:14", "2312-04-24T10:13:14"], 113 ["24-Apr-2312-10:13:14", "2312-04-24T10:13:14"], 114 ["24-Apr-2312-04:30", "2312-04-24T04:30:00"], 115 ["24-Apr-2312/10:13:14", "2312-04-24T10:13:14"], 116 ["24-Apr-2312()10:13:14", "2312-04-24T10:13:14"], 117 // Open paren only comments out the time 118 ["24-Apr-2312(10:13:14", "2312-04-24T00:00:00"], 119 120 // mday being 3+ digits, while year being 2-3 digits. 121 ["024-Apr-23", "2023-04-24T00:00:00"], 122 ["024-Apr-023", "2023-04-24T00:00:00"], 123 ]; 124 125 for (const [testString, isoString] of tests) { 126 const testDate = new Date(testString); 127 const isoDate = new Date(isoString); 128 129 assertEq(testDate.getTime(), isoDate.getTime(), 130 testString); 131 } 132 133 const invalidTests = [ 134 // mday being out of range. 135 "32-01-32", 136 137 // Duplicate date. 138 "2012-Apr-08 12/12/12", 139 140 // > TimeClip limit 141 "13-Sep-275760 00:00:01 GMT", 142 143 // Rejected delimiters after prefix 144 "24-Apr-2312T10:13:14", 145 "24-Apr-2312:10:13:14", 146 "24-Apr-2312^10:13:14", 147 "24-Apr-2312|10:13:14", 148 "24-Apr-2312~10:13:14", 149 "24-Apr-2312+10:13:14", 150 "24-Apr-2312=10:13:14", 151 "24-Apr-2312?10:13:14", 152 153 // Late weekday 154 "24-Apr-2023 Mon 12:34:56", 155 "24-Apr-2023,Mon 12:34:56", 156 ]; 157 158 for (const testString of invalidTests) { 159 assertEq(Number.isNaN(new Date(testString).getTime()), true, testString); 160 } 161 162 if (typeof reportCompare === "function") 163 reportCompare(true, true);