2012-01-13 51 views
12

如果$ due等於無日期,我想要一個邏輯,那麼我希望數據以2000開頭。我的下面的代碼不起作用。

if($due == '0000-00-00 00:00:00'){ 
    $due = strtotime('2000-00-00 00:00:00'); 
} 
+1

請提供'var_dump($ due);' – Wrikken 2012-01-13 16:38:48

+2

這個日期來自哪裏? – webbiedave 2012-01-13 16:38:54

+0

如果您已從數據庫檢索到該值,則最好在查詢中執行此邏輯。除非你在''if()' – 2012-01-13 16:40:35

回答

25

如果你是存儲在適當的$的strtotime(),那麼你需要給它這樣的比較,也

if($due == strtotime('0000-00-00 00:00:00')){ 
    $due = strtotime('2000-00-00 00:00:00'); 
} 

,或者更簡單地

if($due == 0){ 
    $due = strtotime('2000-00-00 00:00:00'); 
} 

但如果$由於來自你的分貝作爲一個字符串,你會想strtotime()它:

$due = strtotime($due); 
if($due == 0){ 
    $due = strtotime('2000-00-00 00:00:00'); 
} 

雖然知道時區。也就是說,的strtotime( '0000-00-00 00:00:00 UTC')!=的strtotime( '0000-00-00 00:00:00 EST')。這也可能會打破你的比較。

+5

strtotime('0000-00-00 00:00:00') 可能會返回負值,null,false取決於PHP版本 – XuDing 2012-11-01 02:38:54

1

你需要確保你是在相同的格式比較值。與你當前所擁有的三件事情上會發生:

  • 如果$dueint,你用0000-00-00 00:00:00比較它的字符串將被轉換爲int,這將導致0,並且$due會與0相比。這隻會導致匹配,如果$due === 0
  • 如果$duebool,字符串將被轉換爲bool,這將導致TRUE,並且只有在$due === TRUE時纔會得到匹配項。
  • 如果$due是任何其他類型,它將被轉換爲一個字符串,並將兩個字符串進行比較。只有在$due === '0000-00-00 00:00:00'的情況下,您纔會得到一個匹配。

如果會說你可能需要比較值作爲整數。這意味着,你需要通過strtotime()通過任何字符串 - 包括$due,如果它是一個字符串。由於您未顯示$due的示例值,因此無法提供確切的工作代碼。

0

strtotime(YourDate) != NULL也可以正常工作。

我正在處理數據庫的DOB和DOM(結婚日期)部分。似乎NULL默認將日期保存爲0000-00-00。說實話,這是一種愚蠢的事情。

或者,也許這是我的愚蠢,使該字段爲DATE字段,而不是使其成爲VARCHAR並在那裏保留STRTOTIME值。

<?php 
    if(strtotime($dates->dom) != NULL) 
    { 
     echo '<a href="' . base_url() . 'dates/dom/' . $dates->dom . '">' . date('j F, Y',strtotime($dates->dom)) . '</a>'; 
    } 
    else 
    { 
     print 'Not Listed Yet'; 
    } ?></strong> 
0

我想建議最簡單的形式

if(!$due) 
     $due = strtotime('2000-00-00 00:00:00'); 
0

這裏是解決檢查數據庫(MySQL的)如果時間字段爲空或'0000-00-00 00:00:00'

選擇所有與開始時間爲空或'0000-00-00 00:00:00'且endtime不是(null或'0000-00-00 00:00:00')

在數據庫末尾

select * from table where IFNULL(MONTH(starttime),0) >= 1 and IFNULL(MONTH(endtime),0) < 1; 

PHP結束

if((int)$starttime && !(int)$endtime){ /// } 
0

我知道這是一個老問題,但這個答案可以幫助別人

的strtotime成功返回時間戳,否則返回FALSE。

$test = strtotime($due); 
$due = (!$test || $test < 0) ? '2000-00-00 00:00:00' : $due; 

unset($test); 

關於。

0

我不知道爲什麼strtotime沒有爲我正確工作。可能是因爲時區和其他東西。

一如既往的花式正則表達式就像一個魅力。我有點沉迷於它!

if(preg_match("/0{4}/" , $dbDateField)) 
{ 
    // no its not acceptable 
} 
else 
{ 
    //ok 
}