Le basi
Il modo simplist per convertire un formato della data in un altro è quello di utilizzare strtotime()
con date()
. strtotime()
convertirà la data in Unix Timestamp. Quindi Unix Timestamp può essere passato a date()
per convertirlo nel nuovo formato.
$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
O come un one-liner:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
Tenete a mente che strtotime()
richiede la data di essere in un valid format. Se non si fornisce un formato valido, verrà restituito il valore false strtotime()
che causerà la data tra il 1969-12 e il 3131.
Utilizzando DateTime()
partire da PHP 5.2, PHP offerto la classe DateTime()
che ci offre gli strumenti più potenti per lavorare con date (e tempo). Siamo in grado di riscrivere il codice di cui sopra utilizzando DateTime()
come così:
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
Lavorare con Unix timestamp
date()
prende un timeatamp Unix come secondo parametro e restituisce una data formattata per voi:
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime() funziona con timestamp Unix aggiungendo un @
prima del timestamp:
Se il timestamp è in millisecondi (può terminare in 000
e/o il timestamp è di tredici caratteri) è necessario convertirlo in secondi prima di poterlo convertire in un altro formato.Ci sono due modi per farlo:
- Trim le ultime tre cifre fuori usando
substr()
Taglio le ultime tre cifre possono essere acheived diversi modi, ma utilizzando substr()
è il più facile:
$timestamp = substr('1234567899000', -3);
- Dividere il substr per 1000
è possibile anche convertire il timestamp in secondi dividendo per 1000. Poiché il timestamp è troppo grande per sistemi a 32 bit di fare matematica in è necessario utilizzare la libreria BCMath fare la matematica come stringhe:
$timestamp = bcdiv('1234567899000', '1000');
Per ottenere un timestamp Unix è possibile utilizzare strtotime()
che restituisce un timestamp Unix:
$timestamp = strtotime('1973-04-18');
Con DateTime() è possibile utilizzare DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
Se stai usando PHP 5.2 è possibile utilizzare l'opzione U
formattazione invece:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
Lavorare con formati non standard e data ambiguo
Purtroppo non tutte le date che uno sviluppatore deve lavorare con sono in un formato standard. Fortunatamente PHP 5.3 ci ha fornito una soluzione per questo. DateTime::createFromFormat()
ci consente di indicare a PHP in che formato è inserita una stringa di data in modo che possa essere analizzata correttamente in un oggetto DateTime per ulteriori manipolazioni.
$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
In PHP 5.4 abbiamo ottenuto la possibilità di fare l'accesso membro della classe su di un'istanza è stato aggiunto che ci permette di trasformare il nostro codice DateTime()
in un one-liner:
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');
http://tech-blog.maddyzone.com/php/type-date-convert-php articolo molto bello –