簡體   English   中英

strtotime和日期返回錯誤的日期

[英]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.

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