Написал себе в МоёмКруге день рождения:

И получилось вот что:

Год и месяц менять пробовал. Меняются. Но любое число любого месяца любого года до 1901 включительно на выходе стабильно превращается в 12-е. А при редактировании оно именно такое, которое я вводил.
Вот честно, я не представляю, как такое можно было запрограммировать.

И получилось вот что:

Год и месяц менять пробовал. Меняются. Но любое число любого месяца любого года до 1901 включительно на выходе стабильно превращается в 12-е. А при редактировании оно именно такое, которое я вводил.
Вот честно, я не представляю, как такое можно было запрограммировать.
Tags:
no subject
no subject
no subject
no subject
no subject
no subject
- умеючи - долго...
/анекдот/
я вот подумал, что явно как-то с unix timestamp вязано, и по-быстрому попробовал из питона дернуть mktime. Ругается argument out of range.
Видимо, где-то там в базе, как-то это всё иначе дергается, а ошибка просто не обрабатывается. Почему 12 получается - даже предположить боюсь.
Но прикол в том, что 31-е февраля ввести не позволяет. Это, видимо, отрабатывается или раньше, или ошибка другая, которую ловят.
no subject
кстати, да. чего эт я...
>>> time.localtime(time.mktime((1902, 1, 31, 0, 0, 0, 0, 0, 0)))
(1902, 1, 31, 0, 0, 0, 4, 31, 0)
>>> time.localtime(time.mktime((1901, 1, 31, 0, 0, 0, 0, 0, 0)))
Traceback (most recent call last):
File "", line 1, in ?
OverflowError: mktime argument out of range
Re: кстати, да. чего эт я...
и если его обратно потом перевести в день/месяц/год, то что получится?
no subject
Значения получаются отрицательные, но у питона float для хранения timestamp'а. В дробной части хранят доли секунд.
>>> time.mktime((1902, 1, 31, 0, 0, 0, 0, 0, 0))
-2143333800.0
>>> time.mktime((1901, 1, 31, 0, 0, 0, 0, 0, 0))
Traceback (most recent call last):
File "", line 1, in ?
OverflowError: mktime argument out of range
>>> time.mktime((1970, 1, 1, 0, 0, 0, 0, 0, 0))
-10800.0
>>> time.mktime((1970, 1, 31, 0, 0, 0, 0, 0, 0))
2581200.0
no subject
И действительно,
<?phperror_reporting(E_ALL);
$i = strtotime("1901-12-14");
echo "time=$i\n";
echo date("j F Y", $i);
?>
дает
time=-214747200014 December 1901
А для 13-го декабря -
time=. Причём ошибок никаких не генерируется, ага.1 January 1970
Это может объяснить 1901 год. Но почему 12-е число и почему правильно воспроизводится месяц и год??
no subject
но пока лениво-инетерсно, дальше вглубь рыться возможности нет...
no subject
setDate($date, $myBD);
}
не?
no subject
no subject
no subject
no subject
?
no subject