Это проблема перехода на летнее время, поскольку Date () использует местное время.
Я живу в Бразилии, и 21 октября 2012 года - начало перехода на летнее время в большей части моей страны, поэтому местные даты в 21 октября 2012 года между 0: 0 и 1: 0 не существуют в Бразилии!
Некоторые люди комментируют здесь, что это работает. Это происходит потому, что возвращение правильного или неправильного часа зависит от страны местного пользователя.
См .: http://www.timeanddate.com/news/time/brazil-dst-2012.html
В Бразилии в 2012 году Java считает, что летнее время начинается с 14 октября (фактически оно начинается через 1 неделю)
var dt = new Date(2012,9,14);
alert(dt.getHours());
производит 1 и
См .: http://www.timeanddate.com/time/dst/2013.html
Решением является использование времени UTC (всемирное координированное время), поскольку изменения летнего времени отсутствуют, и вы используете своего рода абстрактное время. В большинстве практических применений проблем нет.
var dt = new Date( Date.UTC(2012, 9, 21, 8, 5, 12));
alert( (dt.getUTCMonth()+1) + '/' + dt.getUTCDate() + '/' +
dt.getUTCFullYear() + " " + dt.getUTCHours()+ ':' +
dt.getUTCMinutes() + ':' + dt.getUTCSeconds() );
проще, если кто-то не использует часы, минуты и секунды, просто поместите фиктивное значение часа, большее или равное 1, как я показал выше.