Ich versuche, ein Datum von JJJJ-MM-TT in TT-MM-JJJJ umzuwandeln (aber nicht in SQL). Ich weiß jedoch nicht, wie für die Datumsfunktion ein Zeitstempel erforderlich ist, und ich kann keinen Zeitstempel aus dieser Zeichenfolge abrufen.
Wie ist das möglich?
Verwenden Sie strtotime()
und date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(Siehe die strtotime und date Dokumentation auf der PHP Site.)
Beachten Sie, dass dies eine schnelle Lösung für die ursprüngliche Frage war. Für umfangreichere Konvertierungen sollten Sie wirklich die Klasse DateTime
zum Parsen und Formatieren verwenden :-)
Wenn Sie die Konvertierung von strtotime vermeiden möchten (z. B. kann strtotime Ihre Eingaben nicht analysieren), können Sie Folgendes verwenden:
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');
Oder äquivalent:
$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');
Sie geben zunächst das Format $ dateString an, in dem sich $ newDateString befindet.
Oder wenn das Quellformat immer "Y-m-d" (jjjj-mm-tt) ist, verwenden Sie einfach 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
?>
Verwenden:
implode('-', array_reverse(explode('-', $date)));
Ohne den Aufwand für die Datumskonvertierung bin ich mir nicht sicher, ob es wichtig ist.
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
Dieser Code funktioniert für jedes Datumsformat.
Sie können die Reihenfolge der Ersetzungsvariablen wie $ 3- $ 1- $ 2 aufgrund Ihres alten Datumsformats ändern.
Auch eine andere obskure Möglichkeit:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
Ich weiß nicht, ob ich es aber trotzdem nutzen würde :)
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
Weitere Informationen finden Sie in der Dokumentation für strtotime
.
Oder noch kürzer:
$new_date = date('d-m-Y', strtotime(your date variable));
Hinweis : Da die Antwort dieses Posts manchmal positiv bewertet wird, bin ich hierher zurückgekehrt, um die Leute freundlich zu bitten, dies nicht zu tun stimme es nicht mehr zu. Meine Antwort ist uralt, technisch nicht korrekt, und hier gibt es mehrere bessere Ansätze. Ich behalte es hier nur für historische Zwecke.
Obwohl die Dokumentation die Funktion strtotime nur unzureichend beschreibt, hat @rjmunro das Problem in seinem Kommentar korrekt behandelt: Es ist im ISO-Format mit dem Datum "JJJJ-MM-TT".
Auch wenn meine Date_Converter-Funktion möglicherweise noch funktioniert, möchte ich Sie warnen, dass die folgenden Anweisungen möglicherweise ungenau sind. Ignorieren Sie sie daher bitte.
Die am häufigsten gewählte Antwort ist tatsächlich falsch!
Das PHP strtotime manual here gibt an, dass "die Funktion erwartet, eine Zeichenfolge zu erhalten, die ein englisches Datumsformat enthält". Tatsächlich bedeutet dies, dass ein amerikanisches US-amerikanisches Datumsformat wie "m-d-Y" oder "m/d/Y" erwartet wird.
Das bedeutet, dass ein als "Y-m-d" angegebenes Datum möglicherweise von strtotime
falsch interpretiert wird. Sie sollten das Datum im erwarteten Format angeben.
Ich habe eine kleine Funktion geschrieben, um Daten in verschiedenen Formaten zurückzugeben. Nach Belieben verwenden und ändern. Wenn jemand daraus eine Klasse macht, wäre ich froh, wenn das geteilt würde.
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
Es gibt zwei Möglichkeiten, dies zu implementieren:
1.
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2.
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
Sie können die Funktion strftime()
ausprobieren. Einfaches Beispiel: strftime($time, '%d %m %Y');
Verwenden Sie diese Funktion, um von einem beliebigen Format in ein beliebiges Format zu konvertieren
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);
}
Im Folgenden wird PHP Code zum Generieren des morgigen Datums mit mktime()
angegeben. Ändern Sie das Format in TT/MM/JJJJ und drucken Sie es dann mit echo
aus.
$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']));
Für diese spezielle Konvertierung können wir auch einen Formatstring verwenden.
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
Natürlich funktioniert dies nicht für viele andere Datumsformatkonvertierungen, aber da wir in diesem Fall nur Teilzeichenfolgen neu anordnen, ist dies eine andere Möglichkeit, dies zu tun.
Einfacher Weg Verwenden Sie strtotime()
und date()
:
$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));
Mit der Zeit
$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));