我使用的是Laravel,但我很确定它本身与它无关,我的碳日期总是在回归"星期一"作为一周的第一天。问题是,我在一个应该返回的地方,周日"。
/*
|--------------------------------------------------------------------------
| 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
奇怪的是,如果我去家园控制台并键入&#34; locale&#34;,我得到:
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
所以我的默认语言环境应该是USA吗?根据Google的说法,美国,加拿大和日本的一周的第一天是星期天......运行&#34; locale first_weekday&#34;收益率:1(星期一)
所以我不确定我应该做什么或者能做些什么来解决这个问题,因为这是完全错误的。我有一个基于机器区域设置绘制的日历,这显然是错误的,因此它向我的客户显示了一个不适合他们的区域设置的日历。
感谢您分享您的想法!
编辑#1
答案 0 :(得分:2)
方法getWeekStartsAt()
返回静态属性
protected static $weekStartsAt = self::MONDAY;
设置为self::MONDAY
,解析为1
。这就是你获得1
。
您可以致电setWeekStartsAt($day)
来设置一周中正确的开始日期。当然,您需要致电setWeekEndsAt($day)
。
$date->setWeekStartsAt(0);
$date->setWeekEndsAt(6);
// Or better
$date->setWeekStartsAt(Carbon::SUNDAY);
$date->setWeekEndsAt(Carbon::SATURDAY);
答案 1 :(得分:1)
试试这个:在AppServiceProvider::boot()
方法中设置一周的开始和结束:
Carbon\Carbon::setWeekStartsAt(Carbon\Carbon::SUNDAY);
Carbon\Carbon::setWeekEndsAt(Carbon\Carbon::SATURDAY);
您必须同时设置一周的开始和结束。只设置一周的开始到星期日将使一周只有一天。