Mentre trascorro la maggior parte del mio tempo con php e mysql o pgsql, userò DateTime come parola generica per l'API della data. In php non ci sono "Date", "Time", "DateTime" e "DateTimeOffset"Quando scegliamo DateTime su Timestamp
Mentre sviluppo un'applicazione web sempre più elaborata, uso DateTime la maggior parte del tempo, ma a volte mi chiedo se sia davvero quello che voglio. per esempio succede che voglio solo visualizzare la data odierna (per esempio quando voglio memorizzare un forum o post di un blog), non c'è calcolo, nessun filtro da fornire, nessuna iterazione da accadere ... Allora perché io utilizzare \DateTime
sulla funzione date()
?
Ho visto this topic che fornisce una semplice descrizione dei vantaggi di ciascuna tecnologia.
Ma in realtà non risponde alla domanda. È davvero una perdita buttare ancora 2 byte in un oggetto DateTime in PHP e altri 2 byte nel mio database in quanto mi permette di usare l'API DATE_INTERVAL
(in php è DateInterval
) e IntlDateFormatter.
Inoltre, questo post dice che UNIX_TIMESTAMP è riservato dal 1970. Ma non è logico e alcuni test lo dimostrano:
echo date('d/m/Y',time(-1));
echi '31/12/1969' ! Ed è logico. Un int con 32 bit senza segno va da 0 a 4 294 967 295
e ci sono solo quasi 2 miliardi di secondi in 68 anni, quindi l'int è firmato e "timestamp negativo" deve esistere!
Un'altra cosa che per me è davvero importante, e che mi fa scegliere DateTime ogni volta è che voglio trattare le date, non con i numeri interi. DateTime è una data, timestamp no! L'unica sensazione che ho trovato nel timestamp è stata la volta in cui volevo segnare un nome di file perché in quel cas timestamp è timestamp ...
Tuttavia, c'è ancora un problema: gestione del fuso orario. Come MySQL e altri non gestisce fuso orario durante la memorizzazione di date come DateTime, per il momento, io uso l'integrazione TimeZone come la parte uscita di "filtro in uscita fuori"
$toStoreDate = new \DateTime($_POST['date'],new DateTimeZone('UTC'));
$dao->exec('INSERT INTO mytable(mydate) VALUES (\''.$toStoreDate->format('Y-m-d h:i:s').'\')');
$toDisplayDate =new \DateTime($dao->query('SELECT mydate FROM mytable')
->fetch(DAO::FETCH_ASSOC)['mydate']);
$toDisplayDate->setTimeZone(new DateTimeZone('myLocal'));
E 'la strada giusta? Non sarebbe meglio memorizzare un semplice timestamp e ottenere la buona ora locale?
Quindi, ecco un summarize della questione:
- Is i 2 più byte di DateTime una perdita di molto semplice l'utilizzo delle API (solo visualizzazione)
- E 'il momento rinunciare a unix_timestamp?
- Non sarebbe meglio memorizzare un semplice timestamp e ottenere la buona ora locale?
Probabilmente irrilevante, ma 'date()' funzionerà solo fino al 2038 anno. A quell'anno, 'date()' sarà probabilmente deprecato ;-) –
anche se nel 2038 il sistema a 64 bit sarebbe lo standard? E se no, qual è il problema con la migrazione delle specifiche di timestamp di unix da un int a un long int? – artragis
Infatti. Javascript usa anche millisecondi dal 1/1/1970 per misurare il tempo. La mia ipotesi è che il timestamp unix è qui per rimanere ^^ – Johan