簡體   English   中英

php時間“關閉”了8小時14分鍾

[英]php time 'off' by 8 hours and 14 minutes

我有時間/日期問題。 我正在嘗試將當前日期和時間與一天開始時(午夜)的日期/時間進行比較。 當前時間是:

echo date('d M, Y H:i:s e')."<br>";

預期返回的結果是:“ 2014年10月7日12:51:25 America / Los_Angeles”

為了讓時間從今天開始的午夜開始,我有:

echo date('d M, Y H:i:s e',strtotime(date('D, d M, Y')))."<br>";

它返回以下內容:“ 2014年10月7日20:14:00 America / Los_Angeles”

晚上10點(晚上8點)很奇怪,因為UTC不應該是08:00而不是20:00嗎? 還有14分鍾?

誰能幫助我了解這里的情況? 我想念什么?

非常感謝

您正在將一個混亂的日期字符串發送到strtotime函數中。

如果您嘗試這樣做:

echo date('d M, Y H:i:s e').'<br>';
echo date('d M, Y H:i:s e',strtotime(date('Y-m-d H:i:s')))."<br>";

您將獲得一致的結果,因為Ymd H:i:sstrtotime使用的更好的格式。

strtotime文檔中

該函數期望得到一個包含英語日期格式的字符串, 並將嘗試將該格式解析為相對於現在給出的時間戳的Unix時間戳 (自1970年1月1日00:00:00 UTC以來的秒數),或者當前時間(如果未提供)。

為了避免潛在的歧義,最好在可能的情況下使用ISO 8601(YYYY-MM-DD)日期或DateTime :: createFromFormat()

為了獲得您在午夜尋找的時間(我不建議這種方法):

echo date('d M, Y H:i:s e',strtotime(date('Y-m-d')))."<br>";

您可以輕松地輸出一個“永恆的”日期,並在date函數內直接插入一個靜態的00:00:00

echo date('d M, Y 00:00:00 e')."<br>";

但是我喜歡使用DateTime對象

$midnight = new DateTime('today');
echo $midnight->format('d M, Y H:i:s e').'<br>';
// Output from sandbox is: 07 Oct, 2014 00:00:00 US/Pacific<br>

令人高興的是,您可以輕松地在本地進行比較,而無需任何其他操作:

$now = new DateTime('now'); // 2014-10-07 12:34:56
$midnight = new DateTime('today'); // 2014-10-07 00:00:00

var_dump($now > $midnight); // true
var_dump($now < $midnight); // false
var_dump($now === $midnight); // false
var_dump($now !== $midnight); // true

date('Ymd H:i:s')給您當前時間,而不是午夜。 嘗試使用下一個代碼:

echo date('d M, Y H:i:s e',strtotime(date('Y-m-d 00:00:00')))."<br>";

“ 00:00:00”將時間設置為午夜。

您可以使用以下簡單變體:

echo date('d M, Y 00:00:00 e')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM