Я пытаюсь получить текущую метку времени с помощью класса Carbon или DateTime Я получаю неправильную дату, но когда я использую функцию date (), она возвращает правильную дату Я запускаю код на win server 2012 это мой код
dd([
'Carbon::now()->format("Y-m-d H:i:s P")' => Illuminate\Support\Carbon::now()->format('Y-m-d H:i:s P'),
'DateTime()->format("Y-m-d H:i:s P")' => (new DateTime())->format('Y-m-d H:i:s P'),
'date("Y-m-d H:i:s P")' => date('Y-m-d H:i:s P'),
'date("Y-m-d H:i:s P",microtime(true))' => date("Y-m-d H:i:s P", microtime(true)),
'date("Y-m-d H:i:s P", time())' => date("Y-m-d H:i:s P", time()),
'Carbon::now()->getTimestamp()' => Illuminate\Support\Carbon::now()->getTimestamp(),
'microtime()' => microtime(true),
'time()' => time(),
]);
это результат, который я получил
[
"Carbon::now()->format("Y-m-d H:i:s P")" => "2018-06-25 22:41:59 +03:00"
"DateTime()->format("Y-m-d H:i:s P")" => "2018-06-25 22:41:59 +03:00"
"date("Y-m-d H:i:s P")" => "2018-06-19 11:59:22 +03:00"
"date("Y-m-d H:i:s P",microtime(true))" => "2018-06-25 22:41:59 +03:00"
"date("Y-m-d H:i:s P", time())" => "2018-06-19 11:59:22 +03:00"
"Carbon::now()->getTimestamp()" => 1529955719
"microtime()" => 1529955719.4257
"time()" => 1529398762
]
время сервера такое же, как значение функции даты
это не на локальном сервере
вы пробовали с: $dt = Carbon::now();, а затем использовать Carbon::createFromFormat('Y-m-d H', $dt)->toDateTimeString();
это вызывает исключение конечных данных
возможно проблема с форматированием; что, если вы запустите "Y-m-d H:i:s P" без P, то есть "Y-m-d H:i:s"
P показывал +03: 00
date("Y-m-d H:i:s P", microtime(true)) возвращает точное время DateTime (). Это неправильно?
date ("Y-m-d H: i: s P", microtime (true)) возвращает неправильную дату, как и класс DateTime
В целом кажется, что проблема может быть связана со старой ошибкой с монотонным значением мирового времени (комментарий jamie на php.net/manual/ru/function.microtime.php). Можете ли вы проверить, что он говорит, и применимо ли это к вашему серверу?
Попробуйте очистить кеш, а затем повторите попытку.






Это проблема конфигурации.
У вас есть 2 способа получить временную метку UNIX на PHP: microtime(true) и time(). Углерод и DateTime внутренне используют microtime(true).
Вот некоторые подробности, относящиеся к их реализации: https://stackoverflow.com/a/11890155/1921796
Информация в связанном ответе потрясающая, но ... Может ли это объяснить 6-дневную разницу? (Это честный вопрос!)
@ ÁlvaroGonzález Трудно отлаживать без кода и среды. Я думаю, что это ошибка PHP для Windows Server 2012. Мы можем отследить microtime() до функции get_time_func: lxr.room11.org/xref/php-src%40master/win32/time.c#33 Здесь вы можете увидеть специальный оператор if для Windows Server 2012 и Windows 8, похоже, в нем есть ошибка или что-то в этом роде. Если вы можете воспроизвести, было бы полезно сообщить об этом на bugs.php.net
можешь попробовать использовать
Carbon::today()
вместо использования Carbon :: now. Меня устраивает .
если мне нужен другой способ получить правильную дату, я могу использовать функцию даты, но я должен исправить проблему, потому что каждый пакет использует DateTime или Carbon Class получит неправильную дату
Вы пробовали установить часовой пояс в верхней части скрипта? Возможно, вы столкнулись с проблемой часового пояса сеанса и сервера:
date_default_timezone_set ('whatevertimezone');
Я не думаю, что часовой пояс является проблемой, потому что часовой пояс изменит время, а не дату 2018-06-19 - 2018-06-25, как показано в вопросе, несмотря на то, что я пытался изменить часовой пояс, проблема все еще появляется
Привет, вы делаете это на локальном сервере, если да, то проверяли ли вы дату и время сервера?