[英]strtotime and date returning incorrect date
我不確定在這里做錯了什么,但是當我從日期字符串轉換為strtotime並返回格式更好的日期字符串時,日期是錯誤的:
2015-03-20T20:00:00-0600 | Saturday Mar 21, 2015 02 00:am
左邊是輸入變量,右邊是以下代碼的輸出:
<?php
$eventDate = '2015-03-20T20:00:00-0600';
$originalTime = $eventDate;
$eventDate = date('l M j, Y h i:a', strtotime($eventDate));
?>
Date: <?php echo $originalTime;?> | <?php echo $eventDate; ?>
正確的輸出應為Friday March 20th, 2015 8:00pm
實際上是正確的。 -0600部分說您的輸入字符串比系統時間早6個小時,因此PHP增加了6個小時,這給了您Mar 21, 2015 02 00:am
。
要獲取正確的日期和時間,請使用date_default_timezone_set()
函數。 對我來說是:
date_default_timezone_set("Europe/Amsterdam");
這會將時間從UTC轉換為當地時間。 如果那對您不起作用,則可以始終使用strstr()
:
$eventDate = strstr($eventDate, '+', true);
if ($eventDate === false) {
$eventDate = $originalTime;
}
您需要設置默認時區。
http://php.net/manual/en/function.date-default-timezone-set.php
date_default_timezone_set(字符串$ timezone_identifier)
我不確定您的服務器配置了哪個時區,但是請嘗試以下操作:
<?php
date_default_timezone_set('UTC');
$eventDate = '2015-03-20T20:00:00+0000';
$originalTime = $eventDate;
$eventDate = date('l M j, Y h i:a', strtotime($eventDate));
?>
Date: <?php echo $originalTime;?> | <?php echo $eventDate; ?>
附帶說明,我將時區偏移量從-0600更改為+0000
也就是說,在您設置默認時區或更正$ eventDate中的時區偏移之前,您要設置的日期(使用-0600語言環境)將自動適應服務器的本地時間。
我會使用較新的\\ DateTime API 。 還要適當設置默認時區。 在大多數情況下,您可以不使用以下時區參數。 我保留了它以顯示在必要時它是如何完成的。
$timezone = new DateTimeZone("America/New_York");
$eventDate = new DateTime('2015-03-20T20:00:00-0600', $timezone);
echo $eventDate->format('l M j, Y h i:a') . "\n";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.