Domanda

Ho appena scoperto, eseguendo uno script di calendario, che i timestamp in PHP hanno un limite a 2038. Cosa significa veramente?Perché è il 2038 anziché il 2050 o il 2039?Perché un limite se i timestamp contano solo i secondi da una determinata data (1970)?

È stato utile?

Soluzione

Il limite è imposto dagli interi con segno a 4 byte che la maggior parte delle librerie C utilizza per rappresentare quel conteggio.Matematica veloce (si presuppone che 365 giorni l'anno, non esattamente corretto):

2147483648 seconds ~ 68.1 years

Ciò implica anche un limite inferiore di ~ 1900.Alcune librerie hanno iniziato a introdurre il conteggio delle epoche a 64 bit, ma per il momento sono poche e lontane tra loro.

Altri suggerimenti

Il valore massimo di un numero intero a 32 bit è 2.147.483.647.Se aggiungi +1 a questo, ottieni -2.147.483.647.2.147.483.647 secondi da 01-01-1970 00:00:00 è il 19 gennaio 2038. Se aggiungi un secondo in più, ottieni una data da qualche parte nel 1902.

la mia ipotesi è che sia memorizzato in un numero fisso di bit, il che significa un limite su quanto grande può ottenere il timestamp.Potremmo fare un po 'di matematica per capirlo esattamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top