Php - получение даты и времени с использованием DateTime возвращает другое значение из функции date ()

Я пытаюсь получить текущую метку времени с помощью класса 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
]

время сервера такое же, как значение функции даты

Привет, вы делаете это на локальном сервере, если да, то проверяли ли вы дату и время сервера?

Abdush Samad Miah 19.06.2018 11:40

это не на локальном сервере

Abdulbasset Abu Alnasser 19.06.2018 11:44

вы пробовали с: $dt = Carbon::now();, а затем использовать Carbon::createFromFormat('Y-m-d H', $dt)->toDateTimeString();

lovelace 19.06.2018 11:46

это вызывает исключение конечных данных

Abdulbasset Abu Alnasser 19.06.2018 12:15

возможно проблема с форматированием; что, если вы запустите "Y-m-d H:i:s P" без P, то есть "Y-m-d H:i:s"

lovelace 19.06.2018 12:27

P показывал +03: 00

Abdulbasset Abu Alnasser 19.06.2018 12:43
date("Y-m-d H:i:s P", microtime(true)) возвращает точное время DateTime (). Это неправильно?
Alex.Default 10.07.2018 10:04

date ("Y-m-d H: i: s P", microtime (true)) возвращает неправильную дату, как и класс DateTime

Abdulbasset Abu Alnasser 10.07.2018 10:13

В целом кажется, что проблема может быть связана со старой ошибкой с монотонным значением мирового времени (комментарий jamie на php.net/manual/ru/function.microtime.php). Можете ли вы проверить, что он говорит, и применимо ли это к вашему серверу?

Daniel Protopopov 15.07.2018 15:34

Попробуйте очистить кеш, а затем повторите попытку.

Salman Shaikh 16.07.2018 12:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
8
10
552
3

Ответы 3

Это проблема конфигурации. У вас есть 2 способа получить временную метку UNIX на PHP: microtime(true) и time(). Углерод и DateTime внутренне используют microtime(true).

Вот некоторые подробности, относящиеся к их реализации: https://stackoverflow.com/a/11890155/1921796

Информация в связанном ответе потрясающая, но ... Может ли это объяснить 6-дневную разницу? (Это честный вопрос!)

Álvaro González 15.07.2018 18:58

@ Á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

Leprechaun 17.07.2018 09:49

можешь попробовать использовать

Carbon::today() 

вместо использования Carbon :: now. Меня устраивает .

если мне нужен другой способ получить правильную дату, я могу использовать функцию даты, но я должен исправить проблему, потому что каждый пакет использует DateTime или Carbon Class получит неправильную дату

Abdulbasset Abu Alnasser 14.07.2018 08:42

Вы пробовали установить часовой пояс в верхней части скрипта? Возможно, вы столкнулись с проблемой часового пояса сеанса и сервера:

date_default_timezone_set ('whatevertimezone');

Я не думаю, что часовой пояс является проблемой, потому что часовой пояс изменит время, а не дату 2018-06-19 - 2018-06-25, как показано в вопросе, несмотря на то, что я пытался изменить часовой пояс, проблема все еще появляется

Abdulbasset Abu Alnasser 14.07.2018 08:40

Другие вопросы по теме