Domanda

Io sono della della comprensione che a causa della natura che PHP rappresenta date utilizzando millisecondi, non si può rappresentare date passate 2038. Ho un problema dove voglio calcolare le date lontano nel futuro. Migliaia di anni di distanza.

Ovviamente non posso utilizzare la funzione di data php per rappresentare questa data a causa del limite, però, ho qualcosa dalla mia parte ... Tutto quello che voglio fare è archiviare l'anno, mese e giorno. Non mi interessa per ora, minuti, secondi e millesimi di secondo.

È corretto pensare che senza includere queste informazioni aggiuntive dovrei essere in grado di calcolare un sacco ulteriormente in futuro, perché io sono disposto a scartare un sacco di informazioni. È questo il libreria che attualmente fa questo? Se non lo fa alcun Ha qualche consiglio su come affrontare questo problema?

È stato utile?

Soluzione

È possibile anche usare il href="http://php.net/DateTime" rel="noreferrer"> DateTime classe

Altri suggerimenti

potrebbe utilizzare una piattaforma a 64 bit.

La dimensione di un intero dipende dalla piattaforma, anche se un valore massimo di circa due miliardi è il valore usuale (che da 32 bit firmati). piattaforme a 64 bit di solito hanno un valore massimo di circa 9E18.

Fonte .

Scopri la tua piattaforma è a 64 bit con var_dump(PHP_INT_SIZE === 8). Se TRUE, il sistema è a 64 bit.

PHP ha introdotto Datetime () classe nella versione 5.2 per risolvere questo problema. Ma è comunque necessario essere in 64-bit OS.

Dimentica di Windows! Anche se si sta eseguendo Apache a 64 bit su Windows a 64 bit!

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns bool false using WAMP 64-Bit over Windows 64 Bit

Se avete bisogno di timestamp calcolare, utilizzare un sistema a 64 bit (non Windows):

$timestamp = strtotime('22-09-2508');
var_dump ($timestamp);
// returns int 17000496000 using a LAMP Server

È possibile eseguire un server LAMP utilizzando VMWare su Windows e molto probabilmente il vostro server host finale intende utilizzare il servizio a 64 bit come bene.

In altre parole:

if (intval("9223372036854775807")==9223372036854775807) {
  // 64-bit
} else {
  // 32-bit
}

Si è vero?

Nota: il tempo () e getTimestamp () entrambi bene il lavoro in ambiente a 64 bit (Linux) dopo l'anno 2038 ..

Sei corretta in quanto PHP non consente di gestire date> 2038, in modo nativo. Tuttavia ci sono librerie come questo che sfruttano il fatto che i punti flottanti sono a 64 bit, consentendo di bypassare questo problema, se necessario. (Tutto sotto l'ipotesi che si sta utilizzando un sistema a 32 bit ... se si utilizza 64 bit, si sta bene).

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