2013-11-01 62 views
0

我在our projects之一實現了倒計時。由於這是我第一次倒計時我意識到,如果我告訴PHP:PHP「until x date」 - 爲什麼最後一天的24小時不包括在期間內?

$timeleft = strtotime('2013-10-31') - strtotime('now'); 
$daysleft = floor($timeleft/(24*60*60)); 

我得到留給2013-10-31 00:00,而不是整天的時間。

這是爲什麼?我預計2013-10-31 23:59:592013-11-01 00:00

由於從日常生活的例子:我有一個汽車租賃合同,直到2013年10月31日,或任何合同,那麼我就知道租賃期間始終包括最後一天完全。

這可能看起來像一個初學者的問題,但我想知道這個決定的原因。感謝您的想法和經驗。


PS:它在所有的編程語言中都是一樣的嗎?

回答

2

然後給strtotime一個時間。

$timeleft = strtotime('2013-10-31 23:59:59') - strtotime('now'); 

爲什麼?

因爲當你說:

strtotime('2013-10-31'); 

這意味着,當該日開始的確切時間戳,這等於說:

strtotime('2013-10-31 00:00:00'); // hence the missing 24 hours 

編輯

事實上,說strtotime('now')就像說time(),所以你可以刪除,作爲W埃爾。並將它喜歡:

$timeleft = strtotime('2013-10-31 23:59:59') - time(); 

PS:這是在所有編程語言一樣嗎?

它不是任何語言的任何語言的限制。它如何解釋爲您生成時間的功能。在正確解釋它之後,發送正確的值,它將按照您的預期工作。

+0

有沒有另外一種方式來說明包括24小時在內的最後一天?現在我正在使用'$ timeleft = strtotime('2013-10-31 + 1 day') - strtotime('now');' –

+0

+1天也很好,因爲第二天的開始將等於這天。你也可以使用http://www.php.net/mktime –

+0

爲什麼我沒有使用'time()',我指定'date_default_timezone_set('Europe/Vilnius');'在接收正確的本地時間之前。使用'time()'我會得到UTC不一樣:) –

1

其原因與貨幣相同: 1歐元= 1.00歐元而不是1.50歐元。

如果一天的時間很重要,您應該在兩個對象中定義它。

1

由於日期可能不明確,時區不同,日光節省 - 即使是其運行的系統的體系結構,也推薦使用以使用內置的DateTime對象。

有很多方法可以用來操縱日期,如DateTime::diff()沒有所有的手動計算(即floor($timeleft/(24*60*60));)。

因此,當比較日期間隔和/或將它們添加在一起時,它們可能會爲您提供更好的靈活性和準確性。

$date = new DateTime('2013-10-31'); 
$now = new DateTime('today'); 
$diff = $date->diff($now); 
$new = $date->add($diff); 

echo $new->format('Y-m-d H:i'); // 2013-11-01 00:00 
+0

這個'清潔'比'$ timeleft = strtotime('2013-10-31 23:59:59') - time(); ' –

+0

@Hanky웃Panky我已經闡明瞭我的意思,不要誤解我的意思,當然可以使用內置的日期方法,但是,我經常要多次使用日期,在這些地方不得不手動計算它們每次都是重複的,容易出錯 – AlexP

+0

乾杯,很好的答案。我的意思只是指出「清潔」這個詞被「更好」所取代 –

相關問題