islamic.js (3141B)
1 // |reftest| skip-if(!this.hasOwnProperty("Intl")) 2 3 function civilDate(options, date) { 4 var opts = Object.assign({timeZone: "Asia/Riyadh"}, options); 5 return new Intl.DateTimeFormat("ar-SA-u-ca-islamic-civil-nu-latn", opts).format(date); 6 } 7 8 function tabularDate(options, date) { 9 var opts = Object.assign({timeZone: "Asia/Riyadh"}, options); 10 return new Intl.DateTimeFormat("ar-SA-u-ca-islamic-tbla-nu-latn", opts).format(date); 11 } 12 13 function ummAlQuraDate(options, date) { 14 var opts = Object.assign({timeZone: "Asia/Riyadh"}, options); 15 return new Intl.DateTimeFormat("ar-SA-u-ca-islamic-umalqura-nu-latn", opts).format(date); 16 } 17 18 // Test islamic-tbla (Tabular / Thursday epoch). 19 // Compare with islamic-civil (Tabular / Friday epoch). 20 function testIslamicTbla() { 21 var date = new Date(Date.UTC(2015, 1 - 1, 1)); 22 23 // Month and year are the same. 24 var monthYear = {year: "numeric", month: "numeric"}; 25 assertEq(civilDate(monthYear, date), tabularDate(monthYear, date)); 26 27 // Day is different by one. 28 var day = {day: "numeric"}; 29 assertEq(Number(civilDate(day, date)) - Number(tabularDate(day, date)), -1); 30 } 31 32 // Test islamic-umalqura (Umm al-Qura). 33 function testIslamicUmalqura() { 34 var year = {year: "numeric"}; 35 var month = {month: "numeric"}; 36 var day = {day: "numeric"}; 37 38 // From ICU test files, which in turn was generated from: 39 // Official Umm-al-Qura calendar of SA: 40 // home, http://www.ummulqura.org.sa/default.aspx 41 // converter, http://www.ummulqura.org.sa/Index.aspx 42 var dates = [ 43 [ {year: 2016, month: 1, day: 11}, {year: 1437, month: 4, day: 1} ], 44 [ {year: 2016, month: 2, day: 10}, {year: 1437, month: 5, day: 1} ], 45 [ {year: 2016, month: 3, day: 10}, {year: 1437, month: 6, day: 1} ], 46 [ {year: 2016, month: 4, day: 8}, {year: 1437, month: 7, day: 1} ], 47 [ {year: 2016, month: 5, day: 8}, {year: 1437, month: 8, day: 1} ], 48 [ {year: 2016, month: 6, day: 6}, {year: 1437, month: 9, day: 1} ], 49 [ {year: 2016, month: 7, day: 6}, {year: 1437, month: 10, day: 1} ], 50 [ {year: 2016, month: 8, day: 4}, {year: 1437, month: 11, day: 1} ], 51 [ {year: 2016, month: 9, day: 2}, {year: 1437, month: 12, day: 1} ], 52 [ {year: 2016, month: 10, day: 2}, {year: 1438, month: 1, day: 1} ], 53 [ {year: 2016, month: 11, day: 1}, {year: 1438, month: 2, day: 1} ], 54 [ {year: 2016, month: 11, day: 30}, {year: 1438, month: 3, day: 1} ], 55 [ {year: 2016, month: 12, day: 30}, {year: 1438, month: 4, day: 1} ], 56 ]; 57 58 for (var [gregorian, ummAlQura] of dates) { 59 var date = new Date(Date.UTC(gregorian.year, gregorian.month - 1, gregorian.day)); 60 61 // Use parseInt() to remove the trailing era indicator. 62 assertEq(parseInt(ummAlQuraDate(year, date), 10), ummAlQura.year); 63 assertEq(Number(ummAlQuraDate(month, date)), ummAlQura.month); 64 assertEq(Number(ummAlQuraDate(day, date)), ummAlQura.day); 65 } 66 } 67 68 testIslamicTbla(); 69 testIslamicUmalqura(); 70 71 if (typeof reportCompare === "function") 72 reportCompare(0, 0, "ok");