Today is a palindrome day, i.e. the date written in the format YYYYmmdd can be read in reverse order to give the same result.

An article in a swiss newspaper reported, that this is the first palindrome day for 900 years, a little thinking about the problem easily will give you dates like 2001-10-02, 2010-01-02 or 2011-11-02 that are also palindrome days, but only for the format yyyyMMdd, different dates are palindrome dates for ddMMyyyy. I was curious to see how many palindrome days in either format exist from a given date (I used the year 1 AD (there is no year 0!!!), so I created this little script that prints out all the palindrome days since 01.01.01, days that are palindromes in both formats are highlighted:
List of PalindromeDates
And here is the script:
<h2>List of PalindromeDates</h2>
<div id="palindrome"></div>
<script language="JavaScript">
palindromeDates();
function palindromeDates() {
//var current = new Date("2020-01-30");
//const end = new Date("2020-02-03");
var current = new Date("0001-01-01");
const end = new Date("2100-01-01");
var palindromeHtml = "ddmmYYYY, YYYYmmdd, Date<br/>";
while (current < end) {
isddmmYYYYPalindrome = checkPalindrome(getddmmYYYYString(current));
isYYYYmmddPalindrome = checkPalindrome(getYYYYmmddString(current));
if (isYYYYmmddPalindrome && isddmmYYYYPalindrome){
palindromeHtml = palindromeHtml + '<h3>';
}
if (isddmmYYYYPalindrome || isYYYYmmddPalindrome) {
if (isddmmYYYYPalindrome) {
palindromeHtml = palindromeHtml + getddmmYYYYString(current) + ', ';
} else {
palindromeHtml = palindromeHtml + ' , ';
}
if (isYYYYmmddPalindrome) {
palindromeHtml = palindromeHtml + getYYYYmmddString(current) + ', ';
} else {
palindromeHtml = palindromeHtml + ' , '
}
palindromeHtml = palindromeHtml + current.toISOString().slice(0, 10) + '<br/>'
}
current = new Date(current.getTime() + 86400000);
if (isYYYYmmddPalindrome && isddmmYYYYPalindrome){
palindromeHtml = palindromeHtml + '</h3>';
}
}
document.getElementById("palindrome").innerHTML = '<pre>' +palindromeHtml+ '</pre>';
}
function checkPalindrome(aString) {
var isPalindrome = true;
var chars = aString.split("");
for (var i = 0; i < chars.length / 2; i++) {
if (chars[i] != chars[(chars.length - 1 - i)]) {
isPalindrome = false;
break;
}
}
return isPalindrome;
}
function getYYYYmmddString(aDate) {
return aDate.toISOString().slice(0, 10).replace(/-/g, "");
}
function getddmmYYYYString(aDate) {
var yearString = aDate.toISOString().slice(0, 4);
var monthString = aDate.toISOString().slice(5, 7);
var dayString = aDate.toISOString().slice(8, 10);
return dateString = dayString + monthString + yearString;
}
</script>
Because we don’t have months with more than 31 days, there is a large gap between 1380-08-31 and 2001-10-02 but the article is easily proven wrong.