2011-07-27 12 views
5

Po pierwsze, nie jest to pytanie o tym, jak rozwiązać problem, ponieważ moja data jest wyprowadzanie 1969 rokudate() w PHP dopiero od 1970 - 2038

To jest pytanie, dlaczego nie istnieje czas przed 1970 lub po 2038 przy użyciu date().

Próbowałem seaching SO i Google, ale wszystko, co okazuje się to ludzie się błędy podczas korzystania date() nieprawidłowo, powodując w znanym wyjściem December 31, 1969 5:00 pm

Czy ktoś wie dlaczego nie może iść przed 1970? Czy powinniśmy przestać używać date(), ponieważ nie będzie można jej użyć po 2038? Jaka jest historia? Na czym polega praca z datami spoza tego zakresu?

+0

liczbę sekund w int od północy 1/1/1970, i myślę, że jego 2038 ... –

+0

http: // en.wikipedia.org/wiki/Unix_time –

+0

Epoka nie działa! http://xkcd.com/376/ –

Odpowiedz

4

To 2038 problemu

i wygląd, I'm in year 1653

+0

Bardzo ładnie, ale próba użycia 'strtotime' na czymkolwiek mniej niż UTC nie wyprowadzi negatywu. Czy istnieje sposób, aby to naprawić? –

+0

@imoda: To [robi] (http://sandbox.phpcode.eu/g/07bb0.php) działa dla mnie – genesis

+0

Jaka jest wersja PHP? http://codepad.org/SGCTgt1V –

4

Jest to wyjaśnione na PHP manual page dla date():

Prawidłowy zakres datownika jest zazwyczaj od Fri, 13 Dec 1901 20:45:54 GMT do Tue, 19 Jan 2038 03:14:07 GMT. (Są to daty odpowiadające wartościom minimalnym i maksymalnym dla 32-bitowej liczby całkowitej ze znakiem).

Fakt, że dostajesz 31 grudnia 1969 oznacza, że ​​jesteś prawdopodobnie dostarczanie dziwny timestamp parametr do date(), powodując w dniu, w którym nie ma co się spodziewać. Tak jak @Mitch Wheat powiedział w swoim komentarzu, dotyczy to czasu Unix, ponieważ jest względny od 1 stycznia 1970.

3

Porównaj liczbę 2^31 i liczbę sekund między dwiema datami.