Вы рассчитываете целевое время, используя
$targetDate = mktime(23,59,59,09,30,date("Y"));
// be careful: ↑
, но числа, начинающиеся с 0
, обрабатываются как восьмеричные в PHP; кроме того, чтобы процитировать документацию :
Если недопустимая цифра указана в восьмеричном целом числе (т. Е. 8 или 9), остальная часть числа игнорируется.
Таким образом, 09
будет фактически проанализирован как 0
и, как пример № 3 из mktime
показывает
Последний день любого месяца может быть выражен как "0" день следующего месяца, а не как -1 день.
Таким образом, месяц 0 приведет к уменьшению номера года, в данный момент до 2009 года.
Как вы уже догадались, решение простое: отбросьте 0
$targetDate = mktime(23,59,59,9,30,2011);
(date("Y")
вернет 2010 в данный момент, но согласно вашему комментарию вы хотите 2011).
Кстати, я думаю, вы хотите использовать setInterval
вместо setTimeout
; см. setTimeout или setInterval?