--- title: Discordian date id: 59f4eafba0343628bb682785 challengeType: 5 --- ## Description
Task:

Convert a given date from the Gregorian calendar to the Discordian calendar.

## Instructions
## Tests
```yml tests: - text: discordianDate is a function. testString: assert(typeof discordianDate === 'function', 'discordianDate is a function.'); - text: discordianDate(new Date(2010, 6, 22)) should return "Pungenday, the 57th day of Confusion in the YOLD 3176". testString: assert(discordianDate(new Date(2010, 6, 22)) === 'Pungenday, the 57th day of Confusion in the YOLD 3176', 'discordianDate(new Date(2010, 6, 22)) should return "Pungenday, the 57th day of Confusion in the YOLD 3176".'); - text: discordianDate(new Date(2012, 1, 28)) should return "Prickle-Prickle, the 59th day of Chaos in the YOLD 3178". testString: assert(discordianDate(new Date(2012, 1, 28)) === 'Prickle-Prickle, the 59th day of Chaos in the YOLD 3178', 'discordianDate(new Date(2012, 1, 28)) should return "Prickle-Prickle, the 59th day of Chaos in the YOLD 3178".'); - text: discordianDate(new Date(2012, 1, 29)) should return "Setting Orange, the 60th day of Chaos in the YOLD 3178. Celebrate St. Tib\'s Day!". testString: assert(discordianDate(new Date(2012, 1, 29)) === 'Setting Orange, the 60th day of Chaos in the YOLD 3178. Celebrate St. Tib\'s Day!', 'discordianDate(new Date(2012, 1, 29)) should return "Setting Orange, the 60th day of Chaos in the YOLD 3178. Celebrate St. Tib\'s Day!".'); - text: discordianDate(new Date(2012, 2, 1)) should return "Setting Orange, the 60th day of Chaos in the YOLD 3178". testString: assert(discordianDate(new Date(2012, 2, 1)) === 'Setting Orange, the 60th day of Chaos in the YOLD 3178', 'discordianDate(new Date(2012, 2, 1)) should return "Setting Orange, the 60th day of Chaos in the YOLD 3178".'); - text: discordianDate(new Date(2010, 0, 5)) should return "Setting Orange, the 5th day of Chaos in the YOLD 3176. Celebrate Mungday!". testString: assert(discordianDate(new Date(2010, 0, 5)) === 'Setting Orange, the 5th day of Chaos in the YOLD 3176. Celebrate Mungday!', 'discordianDate(new Date(2010, 0, 5)) should return "Setting Orange, the 5th day of Chaos in the YOLD 3176. Celebrate Mungday!".'); - text: discordianDate(new Date(2011, 4, 3)) should return "Pungenday, the 50th day of Discord in the YOLD 3177. Celebrate Discoflux!". testString: assert(discordianDate(new Date(2011, 4, 3)) === 'Pungenday, the 50th day of Discord in the YOLD 3177. Celebrate Discoflux!', 'discordianDate(new Date(2011, 4, 3)) should return "Pungenday, the 50th day of Discord in the YOLD 3177. Celebrate Discoflux!".'); - text: discordianDate(new Date(2015, 9, 19)) should return "Boomtime, the 73rd day of Bureaucracy in the YOLD 3181". testString: assert(discordianDate(new Date(2015, 9, 19)) === 'Boomtime, the 73rd day of Bureaucracy in the YOLD 3181', 'discordianDate(new Date(2015, 9, 19)) should return "Boomtime, the 73rd day of Bureaucracy in the YOLD 3181".'); ```
## Challenge Seed
```js function discordianDate (date) { // Good luck! return true; } ```
## Solution
```js /** * All Hail Discordia! - this script prints Discordian date using system date. * * lang: JavaScript * author: jklu * contributors: JamesMcGuigan * * source: https://rosettacode.org/wiki/Discordian_date#JavaScript */ const seasons = [ 'Chaos', 'Discord', 'Confusion', 'Bureaucracy', 'The Aftermath' ]; const weekday = [ 'Sweetmorn', 'Boomtime', 'Pungenday', 'Prickle-Prickle', 'Setting Orange' ]; const apostle = [ 'Mungday', 'Mojoday', 'Syaday', 'Zaraday', 'Maladay' ]; const holiday = [ 'Chaoflux', 'Discoflux', 'Confuflux', 'Bureflux', 'Afflux' ]; Date.prototype.isLeapYear = function() { const year = this.getFullYear(); if ((year & 3) !== 0) { return false; } return ((year % 100) !== 0 || (year % 400) === 0); }; // Get Day of Year Date.prototype.getDOY = function() { const dayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; const mn = this.getMonth(); const dn = this.getDate(); let dayOfYear = dayCount[mn] + dn; if (mn > 1 && this.isLeapYear()) { dayOfYear += 1; } return dayOfYear; }; Date.prototype.isToday = function() { const today = new Date(); return this.getDate() === today.getDate() && this.getMonth() === today.getMonth() && this.getFullYear() === today.getFullYear() ; }; function discordianDate(date) { if (!date) { date = new Date(); } const y = date.getFullYear(); const yold = y + 1166; let dayOfYear = date.getDOY(); let celebrateHoliday = null; if (date.isLeapYear()) { if (dayOfYear === 60) { celebrateHoliday = 'St. Tib\'s Day'; } else if (dayOfYear > 60) { dayOfYear--; } } dayOfYear--; const divDay = Math.floor(dayOfYear / 73); const seasonDay = (dayOfYear % 73) + 1; if (seasonDay === 5) { celebrateHoliday = apostle[divDay]; } if (seasonDay === 50) { celebrateHoliday = holiday[divDay]; } const season = seasons[divDay]; const dayOfWeek = weekday[dayOfYear % 5]; const nth = (seasonDay % 10 === 1) ? 'st' : (seasonDay % 10 === 2) ? 'nd' : (seasonDay % 10 === 3) ? 'rd' : 'th'; return '' + dayOfWeek + ', the ' + seasonDay + nth + ' day of ' + season + ' in the YOLD ' + yold + (celebrateHoliday ? '. Celebrate ' + celebrateHoliday + '!' : '') ; } ```