Ben bir tarih dönüştürmek için çalışıyorum yyyy-mm-dd
için dd-mm-yyyy
(ancak SQL); Ancak nasıl tarih işlevi bir zaman damgası gerektirir bilmiyorum ve bu dize bir zaman damgası alınamıyor.
Bu nasıl mümkün olabilir?
Ben bir tarih dönüştürmek için çalışıyorum yyyy-mm-dd
için dd-mm-yyyy
(ancak SQL); Ancak nasıl tarih işlevi bir zaman damgası gerektirir bilmiyorum ve bu dize bir zaman damgası alınamıyor.
Bu nasıl mümkün olabilir?
Yanıtlar:
Kullanın strtotime()
ve date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
( PHP sitesindeki strtotime ve tarih belgelerine bakın .)
Bunun orijinal soruya hızlı bir çözüm olduğunu unutmayın. Daha kapsamlı dönüşümler için DateTime
sınıfı gerçekten ayrıştırmak ve biçimlendirmek için kullanıyor olmanız gerekir :-)
Strtotime dönüşümünden kaçınmak istiyorsanız (örneğin, strtotime girdinizi ayrıştıramıyorsa),
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');
Veya eşdeğer olarak:
$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');
İlk olarak $ dateString'in içinde olduğu formatı veriyorsunuz. O zaman $ newDateString'in olmasını istediğiniz formatı söylüyorsunuz.
Veya kaynak biçimi her zaman "Ymd" (yyyy-aa-gg) ise, DateTime öğesini kullanın :
<?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()
- gerçekten daha yararlıstrtotime()
strtotime()
true yazım biçimini (Ymd) diğer biçimlere dönüştürmek için kullanışlıdır , ancak DateTime::createFromFormat()
evrenseldir. Sanki STR_TO_DATE
MySQL
strtotime()
kullanın:
implode('-', array_reverse(explode('-', $date)));
Tarih dönüşüm yükü olmadan, çok önemli olacağından emin değilim.
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
Bu kod her tarih biçimi için çalışır.
Eski tarih biçiminiz nedeniyle $ 3- $ 1- $ 2 gibi değiştirme değişkenlerinin sırasını değiştirebilirsiniz.
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
Daha fazla bilgi için,strtotime
.
Veya daha da kısa:
$new_date = date('d-m-Y', strtotime(your date variable));
Ayrıca başka bir belirsiz olasılık:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
Kullanıp kullanamayacağımı bilmiyorum ama yine de :)
Not : Bu yazının cevabı bazen iptal edildiğinden, buraya geri dönüp insanlardan artık oy kullanmamalarını rica ediyorum. Cevabım antik, teknik olarak doğru değil ve tam burada birkaç iyi yaklaşım var. Burada sadece tarihi amaçlar için saklıyorum.
Belgeler strtotime işlevini kötü tanımlasa da, @rjmunro yorumunda sorunu doğru bir şekilde ele aldı: ISO biçiminde "YYYY-AA-GG".
Ayrıca, benim Date_Converter işlevi hala çalışıyor olsa da, ben aşağıda kesin ifadeler olabileceği konusunda uyarmak istiyorum, bu yüzden onları dikkate almayın lütfen.
En çok oy verilen cevap aslında yanlış!
PHP strtotime kılavuzu burada "fonksiyonu beklediği bir İngiliz tarih biçimini içeren bir dize verilecek" belirtmektedir. Bunun anlamı, "mdY" veya "m / d / Y" gibi bir Amerikan ABD tarih biçimi beklemesidir.
Bu, "Ymd" olarak verilen bir tarihin yanlış yorumlanabileceği anlamına gelir strtotime
. Tarihi beklenen biçimde sağlamalısınız.
Çeşitli biçimlerde tarihleri döndürmek için küçük bir işlev yazdım. İstediğiniz zaman kullanın ve değiştirin. Eğer birisi bunu bir sınıfa dönüştürürse, paylaşılırsa çok sevinirim.
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
Bunu uygulamanın iki yolu vardır:
1.
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2.
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
strftime()
İşlevi deneyebilirsiniz . Basit örnek:strftime($time, '%d %m %Y');
Herhangi bir formattan herhangi bir formata dönüştürmek için bu işlevi kullanın
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);
}
Aşağıda, yarının tarihini kullanarak oluşturmak mktime()
ve biçimini gg / aa / yyyy biçimine değiştirmek ve daha sonra kullanarak yazdırmak için PHP kodu verilmiştir 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']));
Bu özel dönüşüm için bir biçim dizesi de kullanabiliriz.
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
Açıkçası bu, diğer birçok tarih biçimi dönüşümü için işe yaramayacak, ancak bu durumda yalnızca alt dizeleri yeniden düzenlediğimiz için, bunu yapmanın başka bir yolu da var.
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
Basit bir şekilde Kullanın strtotime()
ve date()
:
$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));
Zamanla
$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
Kullan date_create
vedate_format
Bunu dene.
function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}