2013-12-17 28 views
0

我正在檢查當前時間是否在指定的範圍內,但得到奇怪的行爲。是否date-> getTimestamp返回該日期的時間00:00:01?

我想知道,也許當我做$ end_date-> getTimestamp()我得到的那一天的第一分鐘的時間戳?

在這種情況下,我需要添加(60 * 60 * 24)-1到時間戳以獲得該$ end_date的23:59:59對不對?

private function check_date_in_range($start_date, $end_date) 
{ 
    //Get current time 
    $user_ts = time(); 

    if ($start_date == null && $end_date == null) { 
    //if both are null...   

     return 1; 
    } 
    elseif ($start_date != null && $end_date != null) { 
    // if none is null 

     //Convert dates to timestamp for comparison 
     $start_ts = $start_date->getTimestamp(); 
     $end_ts = $end_date->getTimestamp(); 

     // Check that current date is between start & end otherwise return FALSE. 
     return (($user_ts >= $start_ts) && ($user_ts <= $end_ts)); 
+1

您沒有得到「第一分鐘」的時間戳,但是無論您的日期是什麼時間戳。既然你不顯示它們是如何創建的,我們不知道它可能是什麼。我只能提供你不需要轉換爲時間戳(比較直接對象是可能的),並且做手動時間戳操作通常會引入微妙的與DST相關的錯誤。 – Jon

+0

Whare是'$ start_date'和'$ end_date'變量嗎?你可以'var_dump()'他們並告訴我們?這個方法必須返回什麼? –

+0

如果您期待'DateTime'參數,您應該爲它們鍵入提示,即'check_Date_in_range(DateTime $ start_date = null,DateTime $ end_date = null)'。 –

回答

1

如果你想測試的包容範圍,你就確實需要添加多一天:

$now = new DateTime(); 

$end_date_next = $end_date; 
$end_date_next->modify('+1 day'); 

return $now >= $start_date && $now < $end_date_next; 

或者只是使用基於字符串比較的只是日期部分,而不是:

$now = date('Y-m-d'); 

return $now >= $start_date->format('Y-m-d') && 
    $now <= $end_date->format('Y-m-d'); 
+0

問題是,我們不知道$ end_date被設置爲什麼時間。不知道這是否是OP的問題。我以爲是。 – vascowhite

+0

@vascowhite我猜他們的'DateTime'對象是僅使用日期部分創建的......如果一切都失敗了,仍然有很好的舊字符串比較= D –

+0

可能是。他們有他們的答案無論如何:) – vascowhite

0

你可以直接比較DateTime對象,所以像這樣的東西應該工作: -

/** 
* @param DateTime $start_date 
* @param DateTime $end_date 
* @return bool 
*/ 
private function check_date_in_range(\DateTime $start_date, \DateTime $end_date) 
{ 
    if ($start_date == null || $end_date == null) { 
     //if either is null bail. 
     return false; 
    } 
    $currDate = new \DateTime(); 
    $start_date->setTime(0, 0, 0); 
    $end_date->setTime(23, 59, 59); 

    // Check that current date is between start & end otherwise return FALSE. 
    return ($start_date < $currDate && $currDate < $end_date); 
} 

您應該認識到,如果您在PHP中使用寬鬆比較(==),返回1看起來與返回true相同。

+0

是的,但閏秒呢? ;-) –

+0

@Jack忽略他們,他們會走開:) – vascowhite

相關問題