PHP - neden bu tarih işlev hatası olup olmadığını

3 Cevap php
function convertDT($TS) {
    $TS = strtotime($TS);
    $TS -= date("Z");
    $newTS = date("Y-m-d\TH:i:s\Z", $TS);
    return $newTS;
}

echo "Good: ".convertDT('2010-04-20 01:23:45')."\n";
echo "Bad: ".convertDT('2010-31-20 01:23:45')."\n";

İkinci tarih döner: 1969-12-31T23: 00:00 Z

Neden? Bu hata gerekir?

3 Cevap

strtotime() döner false bunu geçersiz zaman damgası verir. false eşdeğerdir 0 Bu hattına geçerken bir tamsayı bağlamda kullanmak, eğer öyleyse:

$newTS = date("Y-m-d\TH:i:s\Z", $TS);

Etkili 0 bir zaman damgası bir tarih yaratıyor. UNIX çağın açısından, 0 sizden sonuç alıyoruz nerede 1 Ocak 1970 olduğunu.

Yapabileceğiniz en iyi şey, bu gibi soemthing olacaktır:

$TS = strtotime($TS);
if($TS === false) {
    throw new Exception("Invalid timestamp.");
}
//etc.

Ikinci tarih, sen ayın 31 ve 20 gün içinde bir tarih oluşturmak için çalışıyoruz. Eğer bu tersine bile, mantıklı değildir. Muhtemelen bir yazım hatası.

Bu okuma http://php.net/manual/en/function.strtotime.php

Errors/Exceptions

Every call to a date/time function will generate a E_NOTICE if the time zone is not valid, and/or a E_STRICT or E_WARNING message if using the system settings or the TZ environment variable. See also date_default_timezone_set()

Giriş dizesi geçerli değil bile bu fonksiyon, herhangi bir hata oluşturmaz.