【发布时间】:2016-10-24 05:36:01
【问题描述】:
这里有一个奇怪的问题。
我正在使用 Laravel,但我很确定它本身与它无关,而且我的 Carbon 日期总是返回“星期一”作为一周的第一天。问题是,我在一个应该返回“星期日”的语言环境中。
/*
|--------------------------------------------------------------------------
| Application Timezone
|--------------------------------------------------------------------------
|
| Here you may specify the default timezone for your application, which
| will be used by the PHP date and date-time functions. We have gone
| ahead and set this to a sensible default for you out of the box.
|
*/
'timezone' => 'America/Montreal',
创建一个碳日期并打印它:
<?php
$date = Carbon::now();
var_dump($date);
输出
object(Carbon\Carbon)[278]
public 'date' => string '2016-06-22 06:05:18.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'America/Montreal' (length=16)
如果我打印一周的第一天
<?php var_dump($date->getWeekStartsAt());
我明白了
1
奇怪的是,如果我去我的宅基地控制台并输入“locale”,我会得到:
LANG=en_US.UTF-8
LANGUAGE=en_US:
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
所以我的默认语言环境应该是美国吧?根据 Google 的说法,美国、加拿大和日本一周的第一天是星期天……运行“locale first_weekday”会产生:1(星期一)
所以我不确定我应该或可以做些什么来解决这个问题,因为这是完全不正确的。我有一个基于机器区域设置的日历,这显然是错误的,因此它向我的客户显示了一个不适合他们的区域设置的日历。
感谢您分享您的想法!
编辑#1
这里是 Carbon 问题的链接:https://github.com/briannesbitt/Carbon/issues/680
【问题讨论】:
-
通过查看github.com/briannesbitt/Carbon/blob/master/src/Carbon/…,我真的看不出在哪里使用了 setWeekStartsAt。也许碳不会自动做到这一点?另外,在他们的测试中,他们并没有真正使用实时时区进行测试,而是手动测试:github.com/briannesbitt/Carbon/blob/master/tests/Carbon/…
标签: php laravel timezone homestead php-carbon