Próbuję przekonwertować datę yyyy-mm-dd
na dd-mm-yyyy
(ale nie w SQL); nie wiem jednak, w jaki sposób funkcja daty wymaga znacznika czasu i nie mogę uzyskać znacznika czasu z tego ciągu.
Jak to jest możliwe?
Próbuję przekonwertować datę yyyy-mm-dd
na dd-mm-yyyy
(ale nie w SQL); nie wiem jednak, w jaki sposób funkcja daty wymaga znacznika czasu i nie mogę uzyskać znacznika czasu z tego ciągu.
Jak to jest możliwe?
Odpowiedzi:
Użyj strtotime()
i date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(Zobacz dokumentację strtotime i datę na stronie PHP).
Zauważ, że było to szybkie rozwiązanie pierwotnego pytania. W przypadku bardziej rozbudowanych konwersji naprawdę powinieneś używać DateTime
klasy do analizowania i formatowania :-)
Jeśli chcesz uniknąć konwersji strtotime (na przykład strtotime nie jest w stanie przeanalizować danych wejściowych), możesz użyć,
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');
Lub równoważnie:
$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');
Najpierw nadajesz mu format $ dateString. Następnie mówisz, że ma on format, w którym ma być $ newDateString.
Lub jeśli formatem źródłowym zawsze jest „Ymd” (rrrr-mm-dd), użyj po prostu 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()
- jest to naprawdę bardziej przydatne niżstrtotime()
strtotime()
przydatny do konwersji True Type format (RMD) do innych formatów, ale DateTime::createFromFormat()
jest uniwersalna. To jest jak STR_TO_DATE
w MySQL
strtotime()
Posługiwać się:
implode('-', array_reverse(explode('-', $date)));
Bez narzutu konwersji daty nie jestem pewien, czy będzie to miało duże znaczenie.
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
Ten kod działa dla każdego formatu daty.
Możesz zmienić kolejność zmiennych zastępczych, np. 3–1–1–2 USD, ze względu na stary format daty.
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
Aby uzyskać więcej informacji, zobacz dokumentację dotyczącąstrtotime
.
Lub nawet krócej:
$new_date = date('d-m-Y', strtotime(your date variable));
Kolejna niejasna możliwość:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
Nie wiem, czy bym go użył, ale nadal :)
Uwaga : Ponieważ odpowiedź na ten post jest czasem pozytywnie oceniana, wróciłem tutaj, aby uprzejmie poprosić ludzi, aby nie głosowali więcej. Moja odpowiedź jest starożytna, niepoprawna technicznie, a tutaj jest kilka lepszych podejść. Trzymam to tutaj tylko do celów historycznych.
Chociaż dokumentacja słabo opisuje funkcję strtotime, @rjmunro poprawnie rozwiązał ten problem w swoim komentarzu: jest w formacie ISO „RRRR-MM-DD”.
Ponadto, mimo że moja funkcja Date_Converter może nadal działać, chciałbym ostrzec, że poniżej mogą znajdować się nieprecyzyjne instrukcje, więc proszę je zignorować.
Najczęściej głosowana odpowiedź jest niepoprawna!
Podręcznik PHP strtotime tutaj stwierdza, że „oczekuje funkcji należy podać ciąg zawierający datę w formacie angielskim”. W rzeczywistości oznacza to, że oczekuje amerykańskiego formatu daty w USA, takiego jak „mdY” lub „m / d / Y”.
Oznacza to, że data podana jako „Ymd” może zostać źle zinterpretowana przez strtotime
. Powinieneś podać datę w oczekiwanym formacie.
Napisałem małą funkcję zwracania dat w kilku formatach. Używaj i modyfikuj do woli. Jeśli ktokolwiek przekształci to w klasę, byłbym zadowolony, gdyby to zostało udostępnione.
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
Istnieją dwa sposoby realizacji tego:
1.
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2)
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
Możesz wypróbować tę strftime()
funkcję. Prosty przykład:strftime($time, '%d %m %Y');
Użyj tej funkcji do konwersji z dowolnego formatu na dowolny format
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);
}
Poniżej podano kod PHP do generowania jutrzejszej daty przy użyciu mktime()
i zmiany formatu na dd / mm / rrrr , a następnie wydrukowania za pomocą 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']));
Do tej konkretnej konwersji możemy również użyć ciągu formatu.
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
Oczywiście nie będzie to działać w przypadku wielu innych konwersji formatu daty, ale ponieważ w tym przypadku po prostu zmieniamy podciągi, jest to kolejny możliwy sposób.
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
Prosty sposób użycia strtotime()
i date()
:
$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));
Z czasem
$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
Użyj date_create
idate_format
Spróbuj tego.
function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}