PHP - Kısa el eğer garip çıkışı ile bir tarih formatı ile ifadesi

5 Cevap

Ben bir alanı biçimlendirmek için bir if deyiminin kısa bir el gösterimini kullanıyorum. Alan boş bir dize ise, o zaman ben bir mysql db içine eklenebilir böylece uygun bir datetime formatında biçimlendirmek için çalışıyorum değilse ben, boş bir dize olarak bırakın. İşte benim php kodu

$date = ($date == '') ? date("Y-m-d", strtotime($date)) : $date;

$ tarih dize boşaltın değil nedense o 'm / d / Y' örnek biçimlendirmek int dönüyor: 04/01/2010

Ben kestirme dışarı kodunu çekin eğer

$date = date("Y-m-d", strtotime($date));
print($date);

Doğru, bu 'Ymd' veya 2010-04-01 gibi biçimlendirilir. Bu durumda neden biliyor mu? Teşekkürler

5 Cevap

Ben size gerçekleştirmek için çalışıyorlardı ne burada karanlıkta bir bıçak biraz alıyorum, ama bu daha şans olabilir:

$date = ($ts = strtotime($date)) ? date("Y-m-d", $ts) : '';

Bu gelen herhangi bir tarih dizesini ayrıştırmak girişimi ve tarih unparsable ise boş bir dize için başarısız olur.

$ Tarih bir çözümlenebilir tarih içermiyorsa date ("Ymd", strtotime ($ tarih)), 1970 civarında bir yerde bir tarih dönecektir, çünkü bir tarih ayrıştırmak strtotime yeteneği üzerinde bir kontrol yapmak için önemli olduğunu unutmayın.

örneğin:

$ php -r 'var_dump(date("Y-m-d", strtotime("thisisnotadate")));'
string(10) "1970-01-01"
$ php -r 'var_dump(date("Y-m-d", strtotime("01/01/1901")));'
string(10) "1970-01-01"
$ php -r 'var_dump(date("Y-m-d", strtotime("01/01/2048")));'
string(10) "1970-01-01"
$

strtotime sadece 1970 için sınırlayan bir 32 bit zaman damgası, uyum tarihleri ​​işleyebilir -. 2038 Ayrıca, bazı tarih biçimleri belirsiz olabilir.

sadece onları geçmek, ya da eşitsizlik kontrol etmek için eşitlik operatörünü değiştirmek, üçlü operatörü argümanlarını karıştı:

$date = ($date !== '') ? date("Y-m-d", strtotime($date)) : $date;

Eğer açıklamak durumunda, $date zaten m/d/Y gösterimi kullanarak komut başka bir yerde ayarlanmış olmalıdır. Bu durumda, üçlü operatör leves $date bakir.

Eğer kestirme kurtulmak, o m/d/Y dize {[(3 ile strtotime tarafından bir zaman damgası zorla, ve sonra düzgün bir Y-m-d dizeye ediliyor )]}.

Şu anda, bir ifadedir:

If $date is an empty string, pass that empty string as a timestamp to the string to time function. Pass that to the date function. Otherwise return the contents of $date.

Belki niyetinde:

$date = ($date == '') ? date("Y-m-d") : $date;

Eğer (üçlü sözdizimi kullanarak) gerek yok bir şey yapıyoruz gibi geliyor bana. Yorumlarınızı birinden My intention is that if it is an empty string then keep it an empty string, if not then formate it using strtotime then the date function. I would need the strtotime in there to properly format it for mysql

if($date != '')  // leave it alone if it is an empty string
{
    $date = date("Y-m-d", strtotime($date));
}

(Important note - Ben yıllardır PHP dokunulmaz değildir, bu yüzden sözdizimi kapalı olabilir, ancak prensip aynıdır)