DateTime-> getTimeStamp () портит часовой пояс - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь импортировать метки времени из таблицы 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 голосов
/ 24 июня 2019

Часовой пояс не был установлен. На самом деле, мой хостер не поддерживает часовые пояса. Вздох.

Грязный взлом, который пренебрегает DST: $timestamp += 2*60*60

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...