DateTime-> getTimeStamp()弄乱了时区

时间:2019-06-24 18:11:01

标签: php datetime timezone

我正在尝试从SQL表导入时间戳。时间戳记为UTC,我需要将其转换为阿姆斯特丹当地时间。目前,我正在使用Datetime->format(),但各地听到我应该使用strftime()。我确实想使用strftime(),因为这似乎是尊重语言的唯一方法。

我无法将DateTime对象转换为时间戳,也无法更改格式的语言。

setlocale(LC_TIME, "nl_NL");
$dbdate = "2019-06-24 18:02:30"; //SQL UTC timestamp
$date = DateTime::createFromFormat("Y-m-d H:i:s", $dbdate, new DateTimeZone('UTC'));
$date->setTimezone(new DateTimeZone('Europe/Amsterdam'));

$fdate0 = $date->format('l H:i Y-m-d');
$fdate1 = strftime("%A %R %F",$date->getTimestamp());

echo $fdate0." compared to ".$fdate1;

实际输出: Monday 20:02 2019-06-24 compared to Monday 11:02 2019-06-24

预期输出: Maandag 20:02 2019-06-24 compared to Maandag 20:02 2019-06-24

请注意,strftime方法不正确地放置了9个小时。

编辑:完全相同的代码现在给出不同的结果。 strftime仍然会丢失2小时,但是正确的语言环境。

以前,我是在http://sandbox.onlinephpfunctions.com/上运行代码的。现在,我在托管的服务器空间上运行了代码。

    $sql = "SELECT `timestamp` FROM  `mytimes` 
WHERE  `id` =$cid;";
    $retval = mysqli_query($conn,$sql);
    if(!$retval){
        die("Could not get data: ".mysqli_error());
    }

    while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC)){    
        setlocale(LC_TIME, "nl_NL");
        $dbdate = $row["timestamp"];
        $date = DateTime::createFromFormat("Y-m-d H:i:s", $dbdate, new 
        DateTimeZone('UTC'));
        $date->setTimezone(new DateTimeZone('Europe/Amsterdam'));

        //$fdate0 = $date->format('l H:i Y-m-d');
        $fdate1 = strftime("%A %R %F",$date->getTimestamp());
    }

该代码现在提供类似于Maandag 18:02 2019-06-24的时间戳,该时间戳使用正确的语言,但由于某种原因仍是UTC时间。为什么它失去了欧盟时区??

1 个答案:

答案 0 :(得分:0)

相关时区未安装。实际上,我的托管服务商不支持任何时区。叹气。

忽略DST的肮脏黑客:$timestamp += 2*60*60