8

I am trying to get the current timestamp using Carbon or DateTime Class I get wrong date but when I use date() function it return the correct date I run the code on win server 2012 this is my code

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(),
]);

this is the output that I got

[
  "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
]

the server time is the same as the value of date function

Cœur
  • 37,241
  • 25
  • 195
  • 267

3 Answers3

2

This is a configurations issue. You have 2 ways to get UNIX-timestamp at PHP: microtime(true) and time(). Carbon and DateTime are using microtime(true) internally.

Here are some details referring to their implementation: https://stackoverflow.com/a/11890155/1921796

Leprechaun
  • 759
  • 5
  • 14
  • 1
    The information in the linked answer is awesome but... Can this explain a 6-day difference? (This is an honest question!) – Álvaro González Jul 15 '18 at 16:58
  • @ÁlvaroGonzález It's hard to debug without code and environment. I think it's a bug in PHP for Windows Server 2012. We can trace `microtime()` to function `get_time_func`: https://lxr.room11.org/xref/php-src%40master/win32/time.c#33 Here you can see special if statement for Windows Server 2012 and Windows 8, looks like it has a bug or something like this. If you can reproduce it would be helpful to report it at https://bugs.php.net/ – Leprechaun Jul 17 '18 at 07:49
0

Have you tried setting the timezone at the top of the script? You might be running into a session vs server timezone issue:

date_default_timezone_set ('whatevertimezone');
Mason Stedman
  • 613
  • 5
  • 12
  • 2
    I do not think the timezone is the problem because timezone will change the time not the date 2018-06-19 - 2018-06-25 as shown in the question despite that I tried to change the timezone the problem still appear – Abdulbasset Abu Alnasser Jul 14 '18 at 06:40
-1

can you try using

Carbon::today() 

instead of using Carbon::now. It works for me .

Codex
  • 155
  • 6
  • 1
    if I want another way to get the correct date I can use date function but I have to fix the problem because each package uses DateTime or Carbon Class will get wrong date – Abdulbasset Abu Alnasser Jul 14 '18 at 06:42