2012-02-27 29 views
6

我在這裏遇到問題..php - 早於給定日期時間的一小時

假設我有這種日期時間。

 

$date = strtotime($date); 
 

我需要這被轉換成Unix的時間戳格式了一小時earlier..I試圖

 

$date = strtotime($date-86400) 
 

,但在我看來,這是錯誤的。當我潛入餐桌時,它返回0。

什麼是實現這一目標的恰當方法?

謝謝。

+0

有3600秒,一小時,一天86400秒。你必須減去3600秒。 'strtotime($ date) - 3600;' – Cheery 2012-02-27 04:20:11

回答

4

strtotime會爲您提供日期的unix時間戳。從這個時間戳,你再減去你的時間:

$date = strtotime($date) - 3600; // 3600 = 60 * 60 

如果你打電話strtotime($date - 3600),就好像獲得了-3600(例如strtotime(-3600))的時間,這是沒有意義的,因爲預期的strtotime一個字符串作爲第一個參數。

+2

一小時有3600秒,一天有86400秒。 – Cheery 2012-02-27 04:19:22

+0

啊是的......我完全陷入了一片混亂......我不應該指望60 * 60 * 24 ......這讓我在一天中的秒......愚蠢的我:( – foxns7 2012-02-27 04:38:39

5

你可以這樣做:

 

$testDateStr = strtotime($date); 
$finalDate = date("Y-m-d H:i:s", strtotime("-1 hour", $testDateStr)); 
 

希望它可以幫助

+0

雖然這個答案很自負,對那些熟悉'date()'和'strtotime()'的人來說,它會改進你的答案,並給出一些解釋。 – mickmackusa 2017-04-20 21:05:13

3

86400秒爲一天,而不是一小時。

strtotime()的輸出是一個unix時間戳。提前3600秒是時間戳減1小時。所以:

$date = strtotime($somestring); 

$hourago = $date - 3600; 

,或者根據$ somestring的原始格式:

$hourago = strtotime($somestring . " - 1 hour"); 

而且不要忘了date_default_timezone_set()

1

嘗試此查詢

$query= "insert into yourTable(otherValues, date) 
values (otherFields, DATE_ADD(NOW(),INTERVAL -1 hour)) 

使用DATE_ADD插入比當前時間少1小時的日期值。

+0

因爲OP沒有要求'mysql'解決方案或'INSERT',所以解決了。還應該包括某種解釋,以便讀者能夠完全理解/從答案/方法中受益。 – mickmackusa 2017-04-20 21:01:54

0

沒有人提供DateTime對象解決方案,所以我會的。 這是處理日期時間的最現代的方法,不需要任何分鐘&秒的計算。

我總是喜歡投入某種時區聲明來使事情變得明確。日光節約時間通常與日期時間操作有關,但在這種情況下可能還可以。隨時爲您的案件修改時區。

PHP手動鏈接:

代碼(包括格式化TI我比較)Demo Link

$now=new DateTime('NOW UTC'); 

$now_stamp=$now->getTimestamp(); 
$formatted_now=$now->format("Y-m-d H:i:s"); 
echo "$now_stamp ($formatted_now)\n"; 

$hour_ago=$now->modify('-1 hour'); 
$hour_ago_stamp=$hour_ago->getTimestamp(); 
$formatted_hour_ago=$hour_ago->format("Y-m-d H:i:s"); 
echo "$hour_ago_stamp ($formatted_hour_ago)"; 

輸出:

1492687193 (2017-04-20 11:19:53) 
1492683593 (2017-04-20 10:19:53) 
相關問題