Ну да, вы нашли ошибку в JavaScript.
Я сделал источник просмотра и скопировал его на скрипку, но JSFiddle, похоже, не работает. Вот код:
var monthCodes = Array(5,1,1,4,6,2,4,0,3,5,1,3);
var weekdays =['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'];
var d = +prompt("Day");
var m = +prompt("Month");
var year = +prompt("Year");
var y = year%100;
var c = Math.floor(year/100);
if ((year%4==0) && (year%100!=0 || year%400==0) && (m==1 || m==2))
isLeapJanFeb = 1;
else
isLeapJanFeb = 0;
weekday = Math.floor(1*d + 1*monthCodes[m-1] + 1*y + 1*Math.floor(y/4) - 2*(c%4) - 1*isLeapJanFeb) % 7;
alert("Weekday code computed to be " + weekday);
alert("The weekday is " + weekdays[weekday]);
Если вы используете сегодняшнюю дату, она будет работать, но попробуйте 1 2 1901.
Проблема в том, что при вычислении выдается -3, а -3% 7 равно -3, а при индексировании массива с -3 вы получаете неопределенное значение.
Возможно, некоторые браузеры интерпретируют отрицательный индекс массива как нечто отличное от неопределенного. Возможно, их движок JS работает как Ruby, и для рабочих дней [-3] они считаются с правильного конца, потому что в конце концов 1 февраля 1901 года действительно было пятницей!
Опять же, кто-то опубликовал в Интернете какой-то плохой код! Обязательная ссылка xkcd!