首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DateTime->getTimeStamp()弄乱了时区

DateTime->getTimeStamp()弄乱了时区
EN

Stack Overflow用户
提问于 2019-06-25 02:11:02
回答 1查看 133关注 0票数 0

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

我在将DateTime对象转换为时间戳时遇到了问题,我在更改格式的语言时也遇到了问题。

代码语言:javascript
复制
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/上运行了代码。现在我在我的托管服务器空间上运行了代码。

代码语言:javascript
复制
    $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时间。为什么它会失去欧盟时区?

EN

Stack Overflow用户

发布于 2019-06-25 04:20:06

未安装有问题的时区。事实上,我的主机不支持任何时区。叹一口气。

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

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56741875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档