Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | 3x 3x 10x 10x 10x 10x 10x 10x 5x 5x 5x 5x 10x 10x 3x | const { leapYear, toGurmukhiNum } = require( './utils' )
const { months, weekdays } = require( './consts' )
/**
* Converts given Gregorian Date to the corresponding date in the Nanakshahi Calendar
* @param {Object} [gregorianDate=new Date()] JavaScript Date() Object
* @return {Object} Nanakshahi Date in English and Punjabi
* @example getNanakshahiDate( new Date() )
*/
function getNanakshahiDate( gregorianDate = new Date() ) {
// NS Month Offsets
const monthOffsets = [ 14, 14, 15, 15, 16, 16, 15, 15, 14, 14, 13, 12 ]
// Calculate Nanakshahi Year - March 14 (1 Chet) Nanakshahi New Year
const nsYear = gregorianDate >= new Date( gregorianDate.getFullYear(), 2, 14 )
? gregorianDate.getFullYear() - 1468
: gregorianDate.getFullYear() - 1469
// Check if before 535 N.S. (Nanakshahi Adoption)
Iif ( nsYear < 535 ) {
throw new RangeError( 'Nanakshahi Date Out of Range' )
}
// Calculate Nanakshahi Date
let nsMonth = ( gregorianDate.getMonth() + 9 ) % 12
const nsNextMonth = ( nsMonth + 1 ) % 12
let nsDate
if ( gregorianDate.getDate() >= monthOffsets[ nsNextMonth ] ) {
nsMonth = nsNextMonth
nsDate = gregorianDate.getDate() - monthOffsets[ nsNextMonth ] + 1
} else {
const gregorianMonths = [
31,
leapYear( gregorianDate.getFullYear() ) ? 29 : 28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31,
]
nsDate = gregorianMonths[ ( gregorianDate.getMonth() + 11 ) % 12 ]
- monthOffsets[ nsMonth ] + gregorianDate.getDate() + 1
}
// Get Day of Week
const weekday = gregorianDate.getDay()
return {
gregorianDate,
englishDate: {
month: nsMonth + 1,
monthName: months[ nsMonth ].en,
date: nsDate,
year: nsYear,
day: weekdays[ weekday ].en,
dayShort: weekdays[ weekday ].enShort,
},
punjabiDate: {
month: toGurmukhiNum( nsMonth + 1 ),
monthName: months[ nsMonth ].pa,
date: toGurmukhiNum( nsDate ),
year: toGurmukhiNum( nsYear ),
day: weekdays[ weekday ].pa,
dayShort: weekdays[ weekday ].paShort,
},
leapYear: leapYear( nsYear + 1469 ),
}
}
module.exports = getNanakshahiDate
|