2017-01-04 87 views
0

在php日期中使用邏輯運算符並不完全正確。能夠計算出2016年是在2017年之前,但無法認識到1月在本月4日之前。PHP日期不太工作

我已經注意到這種錯誤一段時間了:如何最好地解決和避免它?

$date_extra_early = date("2017-01-1 07:30:00"); 
$today = date("Y-m-d H:i:s"); 
var_dump($today); 
var_dump($date_extra_early); 
if ($today>$date_extra_early) 
        echo("today is greater than date extra early\n"); 
else echo("today is less than date extra early\n"); 

輸出

串(19) 「2017年1月4日14時五十分32秒」 的字符串(18) 「2017年1月1日7點三十零分○○秒」 今天 是少比日期早

+1

你有一個正確的時間值作爲輸入嘗試過嗎? '$ date_extra_early = date(「2017-01-01 07:30:00」);' – feeela

+0

@feeela好吧,前導零使邏輯陳述成爲可能,但這不僅僅是一個錯字。我注意到日期真的很脆。我依賴它的時代已經崩潰,它已經崩潰了。想知道是否有辦法保證它能按預期工作。 – Stumbler

+0

不能在此刻進行測試,但嘗試 '如果(的strtotime(「$今天」)>的strtotime(「$ date_extra_early」))...' –

回答

3

您可以比較DateTime對象以支持字符串(後者由date()返回)。作爲==, <, >, <=, >=的邏輯運算確實像DateTime對象一樣工作。此外,DateTime構造函數理解很多不同的輸入格式,並且還會幫助處理格式錯誤的輸入。

$earlydate = new DateTime('2017-01-1 07:30:00'); 
$today = new DateTime('now'); 

if($today > $earlydate) 
    echo 'today is greater than date extra early'; 
else 
    echo 'today is less than date extra early'; 

參見:http://php.net/manual/en/class.datetime.php

+0

什麼日期和日期時間之間的區別? – Stumbler

+4

這是你應該自己思考的時候,「我應該查閱手冊」。 –

1

您需要正確datetime格式指定日期

$date_extra_early = date("2017-01-01 07:30:00"); 
           //^missing a leading 0 here 

demo

或者你可以隱蔽你的約會整數和比較

if (strtotime($today)>strtotime($date_extra_early)) { 
    echo("today is greater than date extra early\n"); 
} else { 
    echo("today is less than date extra early\n"); 
} 

在這兩種情況下,打印今天

比日期早額外

demo

+0

這是不正確的,對於'日期()'函數的第一個參數,是一個格式字符串。無需任何格式的字符,該函數不會做任何事情,所以它只是輸出輸入。 – jeroen

1

事實上,你必須使用正確的格式的日期()更大。 在這種情況下,你缺少的在1(天)的前

$date_extra_early = date("2017-01-01 07:30:00"); 
$today = date("Y-m-d H:i:s"); 
var_dump($today); 
var_dump($date_extra_early); 
if ($today>$date_extra_early) 
    echo("today is greater than date extra early\n"); 
else 
    echo("today is less than date extra early\n"); 

輸出前導0:

string '2017-01-04 22:00:57' (length=19) 
string '2017-01-01 07:30:00' (length=19) 
today is greater than date extra early