我有以下两种碳方法。为什么它们给我不同的时间值,尽管是同一个时区?
Carbon\Carbon::today()->timezone('Europe/London')
=> Carbon\Carbon @1587945600 {#3503
date: 2020-04-27 01:00:00.0 Europe/London (+01:00),
}
Carbon\Carbon::today('Europe/London')
=> Carbon\Carbon @1587942000 {#3516
date: 2020-04-27 00:00:00.0 Europe/London (+01:00),
}
我知道我在每种方法中添加的时区不同,但我认为两种方法应该产生相同的结果?
你可以使用 Carbon::today()->shiftTimezone('Europe/London');
来得到你想要的结果,但首先,看看这个。
echo Carbon::now('Europe/London');
echo Carbon::now()->timezone('Europe/London');
两者的输出都是一样的,因为在两种情况下都是在伦敦,所以是连续的事件(几微秒的差距),用相同的时区来表示。
但是。
Carbon::today('Europe/London');
Carbon::today(); // = Carbon::today('GMT');
代表两个不同的时刻 伦敦的今天(一天的开始)和格林威治标准时间的今天(一天的开始)。而伦敦的一天(夏季)比GMT时区晚1小时开始。
现在,如果你改变今天的GMT时区,你改变的只是时区,而不是时刻,所以你在伦敦是1AM。