Sto cercando di convertire una data da yyyy-mm-dd
a dd-mm-yyyy
(ma non in SQL); tuttavia non so come la funzione di data richieda un timestamp e non riesco a ottenere un timestamp da questa stringa.
Com'è possibile?
Sto cercando di convertire una data da yyyy-mm-dd
a dd-mm-yyyy
(ma non in SQL); tuttavia non so come la funzione di data richieda un timestamp e non riesco a ottenere un timestamp da questa stringa.
Com'è possibile?
Risposte:
Usa strtotime()
e date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(Vedi la documentazione su strtotime e date sul sito PHP.)
Si noti che questa è stata una soluzione rapida alla domanda originale. Per conversioni più estese, dovresti davvero utilizzare la DateTime
classe per analizzare e formattare :-)
Se desideri evitare la conversione di strtotime (ad esempio, strtotime non è in grado di analizzare i tuoi input) puoi utilizzare,
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');
O, equivalentemente:
$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');
Prima gli stai dando il formato $ dateString. Quindi gli stai dicendo il formato in cui vuoi $ newDateString.
O se il formato sorgente è sempre "Ymd" (yyyy-mm-dd), usa semplicemente DateTime :
<?php
$source = '2012-07-31';
$date = new DateTime($source);
echo $date->format('d.m.Y'); // 31.07.2012
echo $date->format('d-m-Y'); // 31-07-2012
?>
DateTime::createFromFormat()
- è davvero più utile distrtotime()
strtotime()
utile per convertire il formato di tipo reale (Ymd) in altri formati, ma DateTime::createFromFormat()
è universale. È come STR_TO_DATE
in MySQL
strtotime()
Uso:
implode('-', array_reverse(explode('-', $date)));
Senza il sovraccarico di conversione della data, non sono sicuro che avrà molta importanza.
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
Questo codice funziona per ogni formato di data.
È possibile modificare l'ordine delle variabili di sostituzione come $ 3- $ 1- $ 2 a causa del vecchio formato della data.
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
Per ulteriori informazioni, consultare la documentazione distrtotime
.
O ancora più breve:
$new_date = date('d-m-Y', strtotime(your date variable));
Anche un'altra oscura possibilità:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
Non so se lo userei ma comunque :)
Nota : poiché la risposta di questo post a volte viene votata, sono tornato qui per chiedere gentilmente alle persone di non votare più. La mia risposta è antica, non tecnicamente corretta, e ci sono molti approcci migliori proprio qui. Lo tengo qui solo per scopi storici.
Sebbene la documentazione descriva male la funzione strtotime, @rjmunro ha risolto correttamente il problema nel suo commento: è in formato ISO data "AAAA-MM-GG".
Inoltre, anche se la mia funzione Date_Converter potrebbe ancora funzionare, vorrei avvertire che potrebbero esserci delle dichiarazioni imprecise di seguito, quindi per favore ignoratele.
La risposta più votata è in realtà errata!
Il manuale strtotime di PHP qui afferma che "La funzione prevede di ricevere una stringa contenente un formato data inglese". Ciò che significa in realtà è che si aspetta un formato di data statunitense americano, come "mdY" o "m / d / Y".
Ciò significa che una data indicata come "Ymd" potrebbe essere interpretata erroneamente strtotime
. È necessario fornire la data nel formato previsto.
Ho scritto una piccola funzione per restituire le date in diversi formati. Utilizzare e modificare a piacimento. Se qualcuno lo trasforma in una classe, sarei felice se questo fosse condiviso.
function Date_Converter($date, $locale = "br") {
# Exception
if (is_null($date))
$date = date("m/d/Y H:i:s");
# Let's go ahead and get a string date in case we've
# been given a Unix Time Stamp
if ($locale == "unix")
$date = date("m/d/Y H:i:s", $date);
# Separate Date from Time
$date = explode(" ", $date);
if ($locale == "br") {
# Separate d/m/Y from Date
$date[0] = explode("/", $date[0]);
# Rearrange Date into m/d/Y
$date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2];
}
# Return date in all formats
# US
$Return["datetime"]["us"] = implode(" ", $date);
$Return["date"]["us"] = $date[0];
# Universal
$Return["time"] = $date[1];
$Return["unix_datetime"] = strtotime($Return["datetime"]["us"]);
$Return["unix_date"] = strtotime($Return["date"]["us"]);
$Return["getdate"] = getdate($Return["unix_datetime"]);
# BR
$Return["datetime"]["br"] = date("d/m/Y H:i:s", $Return["unix_datetime"]);
$Return["date"]["br"] = date("d/m/Y", $Return["unix_date"]);
# Return
return $Return;
} # End Function
Esistono due modi per implementare questo:
1.
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2.
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
Puoi provare la strftime()
funzione. Esempio semplice:strftime($time, '%d %m %Y');
Utilizzare questa funzione per convertire da qualsiasi formato a qualsiasi formato
function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
$date_aux = date_create_from_format($from_format, $date);
return date_format($date_aux,$to_format);
}
Di seguito è riportato il codice PHP per generare la data di domani usando mktime()
e cambiare il suo formato nel formato gg / mm / aaaa e poi stamparlo usando echo
.
$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
Per questa conversione specifica possiamo anche usare una stringa di formato.
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
Ovviamente questo non funzionerà per molte altre conversioni del formato della data, ma poiché in questo caso stiamo solo riorganizzando le sottostringhe, questo è un altro modo possibile per farlo.
strtotime()
. :-)
function dateFormat($date) {
$m = preg_replace('/[^0-9]/', '', $date);
if (preg_match_all('/\d{2}+/', $m, $r)) {
$r = reset($r);
if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]";// Y-m-d
if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]";// d-m-Y
if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]";// m-d-Y
if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]";//Y-m-d
}
}
var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31
Modo semplice Usa strtotime()
e date()
:
$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));
Col tempo
$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
Usa date_create
edate_format
Prova questo.
function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}