PHP tarih sorunu - strtotime ne çıktı gerekiyordu değil mi?

5 Cevap php

Benim veritabanında boşluklar DateTimedeğerler (0000-00-00 00:00:00) bir çift var.

I strtotime yoluyla bu çalıştırmak zaman, onlar bağlantılı sayfasındaki bilgilere göre yapması gerektiğini, bunun yerine YANLIŞ "1263247058" return:

http://stackoverflow.com/questions/1224680/php-strtotime-outputs-nothing

Nasıl olur?

Teşekkürler.

5 Cevap

Birçok PHP fonksiyonları standart C kütüphanesi uygulanmasına ilişkin dahili güveniyor ve bu strtotime bir harf () olması olasıdır. İşte tam davranış PHP'nin çalıştığı işletim sistemine bağlıdır anlamına gelir.

Ben () geçersiz tarihleri ​​algılamak için strtotime güvenmek daha iyi değil bence.

Bir yan not olarak ... Ben MySQL kullanıyorsanız sanırım. Onu yapılandırmak için bu yüzden geçersiz tarihleri ​​kabul olmaz mümkündür:

NO_ZERO_DATE

docs for strtotime says, "the value returned by strtotime("0000-00-00") "PHP sürümüne göre değişir Yorumlardan biri olarak. Yani, o belirli bir değer için ek bir kontrol yapmak daha iyidir.

Nasıl gelip diğer yanıtlar açıklanmıştır. Bu kod false değerini zorlar:

if ($db_datetime == 0) {
    $unix_timestamp = false;
} else {
    $unix_timestamp = strtotime($db_datetime);
}

Aşağıdaki kodu (PHP Version 5.3.0) çıkışını düşünün:

echo date( "h:i:sa m/d/Y", strtotime( '00:00:00' ) ) . "<br/>" ;
echo date( "h:i:sa m/d/Y", strtotime( '00:00:00 00-00-0000' ) ). "<br/>"  ;

// Output
12:00:00am 01/12/2010
12:00:00am 01/01/1970

Benim için çalışıyor: \

$ php -r 'var_dump(strtotime("0000-00-00 00:00:00"));'
bool(false)
$

CentOS 5.2 üzerine mac işletim sistemi, hem de PHP 5.2.5 ve PHP 5.2.8. Eğer aynı testi deneyebilir miyim? Sonuç farklı gelirse, PHP'nin hangi sürümü kullanıyorsanız ve hangi platform vardır?

FWIW, bunun yerine sıfır-tarih veritabanında gerçek bir null saklayarak tamamen bütün bu durumu önlemek olabilir beni vurur.