2010-05-14 177 views

回答

5

檢查PHP的strtotime功能全到你設定的日期/時間轉換爲時間戳:http://php.net/manual/en/function.strtotime.php

如果strtotime不能正確處理您的日期/時間格式(「4:00 PM」可能會工作,但不會「在4PM「),你需要使用字符串函數,例如substr解析/更正您的格式並通過另一個函數(例如, mktime

然後將得到的時間戳與當前日期/時間(if ($calulated_timestamp > time()) { /* date in the future */ })進行比較,以查看設置的日期/時間是過去還是未來。

我建議閱讀日期/時間函數上的PHP文檔,並在您遇到困難時返回一些源代碼。

+0

看到伊瓦爾·科斯特的回答 – 2014-08-02 08:53:48

176

由於PHP> = 5.2.0可以使用DateTime類作爲這樣:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) { 
    # current time is greater than 2010-05-15 16:00:00 and thus in the past 
} 

傳遞給DateTime constructor的字符串進行解析according to these rules


注意的是,還可以使用timestrtotime功能。 See original answer

+4

時間戳有一定的侷限性交配,一些bug太多,例如時間戳無法在1970年之前辦理的日期並在2038年後(見伊瓦爾科斯特的回答) – 2014-08-02 08:52:20

+0

真棒的答案! :) – 2014-12-04 12:32:56

+0

如果您使用的是UTC日期(如您應該那樣),我們經常會看到濫用新的DateTime()而不使用參數,更喜歡使用新的DateTime(「now」,new DateTimeZone('UTC'))。這將防止您的應用程序在日期中誤解錯誤。我建議你將它存儲在一個函數的靜態變量,一個類的靜態或在你的運行過程中的其他地方... – Loenix 2016-10-12 08:01:10

75

還有DateTime類,它爲比較運算符實現了一個函數。

// $now = new DateTime(); 
$dtA = new DateTime('05/14/2010 3:00PM'); 
$dtB = new DateTime('05/14/2010 4:00PM'); 

if ($dtA > $dtB) { 
    echo 'dtA > dtB'; 
} 
else { 
    echo 'dtA <= dtB'; 
} 
+0

它實現的功能是什麼? – 2017-09-02 03:57:16

6

dateTime對象範圍從過去大約2920億年到未來相同。時間戳功能有一個限制(如果我沒有記錯,從1970年開始到2038年)。

1

我有這個日期進行比較的,需要一些調整問題

function getDatetimeNow() { 
    $tz_object = new DateTimeZone('Europe/Belgrade'); 
    $datetime = new DateTime(); 
    $datetime->setTimezone($tz_object); 
    return $datetime->format('Y\-m\-d\ h:i:s'); 
} 

$currentDate = getDatetimeNow(); 

$dtA = new DateTime($currentDate); 
$dtB = new DateTime($date); 

if ($dtA > $dtB) { 
    $active = 0; 
    return $active; 
} 
else { 
    $active = 1; 
    return $active; 
} 
相關問題