November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Wednesday, March 12th, 2008 11:35 am
Написал себе в МоёмКруге день рождения:


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


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

Вот честно, я не представляю, как такое можно было запрограммировать.
Wednesday, March 12th, 2008 12:01 pm (UTC)
странно, у меня всё нормально. может они так развлекаются? прочитали, что их критикуют, и прикалываются :)
Wednesday, March 12th, 2008 12:15 pm (UTC)
крайне маловероятно. вносить изменения в рабочий код персонально для меня слишком трудоёмко. да и опасно, можно что-нибудь другое случайно испортить.
Wednesday, March 12th, 2008 12:40 pm (UTC)
а, это происходит с любыми датами до 1901 года? :)
Wednesday, March 12th, 2008 12:43 pm (UTC)
Ну да. После 1901 всё нормально.
Wednesday, March 12th, 2008 12:45 pm (UTC)
у меня тоже получается 12-е января.
Wednesday, March 12th, 2008 01:00 pm (UTC)
- долго ли умеючи?
- умеючи - долго...
/анекдот/

я вот подумал, что явно как-то с unix timestamp вязано, и по-быстрому попробовал из питона дернуть mktime. Ругается argument out of range.

Видимо, где-то там в базе, как-то это всё иначе дергается, а ошибка просто не обрабатывается. Почему 12 получается - даже предположить боюсь.

Но прикол в том, что 31-е февраля ввести не позволяет. Это, видимо, отрабатывается или раньше, или ошибка другая, которую ловят.
Edited 2008-03-12 01:05 pm (UTC)
Wednesday, March 12th, 2008 01:12 pm (UTC)
unixtime там вряд ли используется, он только с 1970 года.
Wednesday, March 12th, 2008 01:14 pm (UTC)
но тем не мение

>>> 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
Wednesday, March 12th, 2008 01:16 pm (UTC)
а какое числовое значение в питоне получается?
и если его обратно потом перевести в день/месяц/год, то что получится?
Wednesday, March 12th, 2008 01:20 pm (UTC)
а вот эти две строки и переводят туда-обратно.

Значения получаются отрицательные, но у питона 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
Wednesday, March 12th, 2008 01:41 pm (UTC)
The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 GMT to Tue, 19 Jan 2038 03:14:07 GMT. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer). (http://ie.php.net/date)

И действительно,
<?php
error_reporting(E_ALL);
$i = strtotime("1901-12-14");
echo "time=$i\n";
echo date("j F Y", $i);
?>

дает time=-2147472000
14 December 1901


А для 13-го декабря - time=
1 January 1970
. Причём ошибок никаких не генерируется, ага.

Это может объяснить 1901 год. Но почему 12-е число и почему правильно воспроизводится месяц и год??
Wednesday, March 12th, 2008 01:44 pm (UTC)
я не знаю, уже самому интересно :)

но пока лениво-инетерсно, дальше вглубь рыться возможности нет...
Wednesday, March 12th, 2008 06:18 pm (UTC)
if(!valid($date)) {
setDate($date, $myBD);
}

не?
Wednesday, March 12th, 2008 10:25 pm (UTC)
не понял
Wednesday, March 12th, 2008 10:37 pm (UTC)
Типа - если дата кривая, ставим ДР кого-то из разработчиков или проекта.
Thursday, March 13th, 2008 09:49 am (UTC)
Так год и месяц-то там сохраняются, значит, они как-то отдельно хранятся. Но вот дата почему-то портится..
Thursday, March 13th, 2008 03:08 am (UTC)
кстати, а не проверял насчет: http://ru.wikipedia.org/wiki/30_%D1%84%D0%B5%D0%B2%D1%80%D0%B0%D0%BB%D1%8F
?
Thursday, March 13th, 2008 09:53 am (UTC)
30 февраля 1930 не проходит - говорит Невозможная дата