簡體   English   中英

如何使用strtotime校正夏令時

[英]How do I correct for daylight savings time with strtotime

我有一個函數,用於為過期的訂閱續訂返回新的過期期限。 如果用戶續約一個月,則該函數如下所示:

$unixtime = strtotime(" today + 1 month") + 86399;
$dt = date("Y-m-d", $unixtime) . ' at ' . date("H:i:s", $unixtime);
return array('unixtime' => $unixtime, 'dt' => $dt);

今天是2月10日,我希望它在2019年3月10日23:59:59返回dt。 但是,它在dt作為2019-03-11在00:59:59返回。 實際上,根據UTC返回的Unix紀元時間是正確的,但是當我返回dt時,它沒有考慮從標准時間到DST的變化。 我還懷疑當秋天的時間重疊時,新的到期時間將縮短一個小時,即22:59:59。

有任何想法嗎?

謝謝。

Datetime可以處理該問題。 嘗試以下代碼:

<?php

$today = new Datetime('today - 1 second');
var_dump($today->format(DATETIME::ATOM));

$expirationDate = $today->add(new DateInterval('P1M'));
var_dump($expirationDate->format(DATETIME::ATOM));

單擊此處以獲取3v4l.org上的代碼。

arueckauer回答了我的問題...但是當他發布消息時,我遭到了兩指黑客的攻擊,並提出了以下建議,該方法也有效:

$dt = date("Y-m-d 23:59:59", time());
$unixtime = strtotime("$dt + 1 month");
$newDT =  = date("Y-m-d", $unixtime) . ' at ' . date("H:i:s", $unixtime);

unixtime是用戶登錄時系統查看的內容,而newDT是顯示的內容。

暫無
暫無

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

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