2016-06-16 153 views
2

我有下面這個日期時間代碼。我要減去23小時在$59分鐘開始變量:php日期時間分數秒秒

$date = 2016-03-14 23:59:59; 
$given = new DateTime($date, new DateTimeZone("Asia/Tokyo")); 
$given->setTimezone(new DateTimeZone("UTC")); 
$end = $given->format("Y-m-d H:i:s"); 
$begin = date('Y-m-d H:i:s',strtotime('-23 hours',strtotime($end))); 

現在輸出的是:

$end is: 2016-03-14 14:59:59 
$begin is: 2016-03-13 15:59:59 

我想輸出是:

$end is: 2016-03-14 14:59:59 
$begin is: 2016-03-13 15:00:00 

我怎麼能減在幾秒鐘內開始?或者有一個最好的方法來做到這一點?

+4

當你只是想更改小時,試試這個:'回聲$開始=日期( 'YMD H:00:00',的strtotime(' - 22小時,的strtotime($結束))); ' –

+2

考慮使用http://carbon.nesbot.com/,它擴展了DateTime和一些有用的功能。你會在其API中執行'$ date-> subHours(23) - > subMinutes(59)'。 – ceejayoz

+0

@FrayneKonok你應該發佈作爲答案! –

回答

2

當你只是想更改小時,可以讓這個獲得的慾望的結果,但你也可以做別的事情一樣阿米特·羅伊沒有或ceejayoz建議。這是一個非常簡單的解決方案,只需執行下列操作:將min和sec重置爲00,以便您的輸出顯示爲您所需。

echo $begin = date('Y-m-d H:00:00',strtotime('-23 hours', strtotime($end))); 
-1

你必須這樣做才能得到理想的結果。你被單獨減去小時

$begin = date('Y-m-d H:i:s',strtotime('-23 hours',strtotime($end))); 

您必須減去分鐘和秒太

$begin = date('Y-m-d H:i:s',strtotime('-23 hours -59 minutes -59 seconds',strtotime($end))); 

最後你得到這個代碼:

$date = "2016-03-14 23:59:59"; 
$given = new DateTime($date, new DateTimeZone("Asia/Tokyo")); 
$given->setTimezone(new DateTimeZone("UTC")); 
$end = $given->format("Y-m-d H:i:s"); 
echo $begin = date('Y-m-d H:i:s',strtotime('-23 hours -59 minutes -59 seconds',strtotime($end))); //2016-03-13 15:00:00 
+0

我不DV你,但想給你一個建議,如果你做出答案比必須添加一些有意義的描述,以便以後用戶可以明白你做什麼,而無需調試你的腳本。 –

+0

@Frayne Konok是那麼複雜的理解。這是不言自明的。我需要說明的地方。爲此,你反對投票。 –

+0

正如我已經告訴你**我沒有DV(downvote)你**,你必須添加你在這裏改變,以滿足OP的要求。 –

0

[作爲Frayne做出評論]當你只是想更改小時,而不是分鐘或秒,你必須設置分鐘和秒至00:00作爲您的願望輸出。

echo $begin = date('Y-m-d H:00:00',strtotime('-23 hours', strtotime($end))); 

你可以用許多不同的方式做這件事,這是一種方法。

+0

你只是把我的答案作爲你的答案。 Okey沒問題。繼續。 –

+0

將'DateTime'與傳統的'date()'函數混合似乎毫無意義並且逆行。 'DateTime'是一個功能強大的類,可以處理所有你需要的東西,絕對沒有理由爲'date()','strtotime()'或其他任何資源提供資源。 – Havenard

+0

@Havenard,我是從Frayne的評論中做出來的。感謝您的建議。 –