странная проблема здесь.PHP Неверный первый день недели для моего часового пояса
Я использую 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
Как ни странно, если я иду в приусадебных консоль и введите «локаль», я получаю:
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 (понедельник)
Так что я не уверен, что я должен или могу сделать, чтобы исправить это, поскольку это совершенно неверно. У меня есть календарь, созданный на основе машинного языка, и это явно неправильно, поэтому он показывает моим клиентам календарь, который не соответствует их языку.
Спасибо, что поделились своими мыслями!
EDIT # 1
Вот ссылка на вопрос Carbon: https://github.com/briannesbitt/Carbon/issues/680
При поиске в https://github.com/briannesbitt/Carbon/blob/master/src/Carbon/Carbon.php, я не могу видеть, где используется setWeekStartsAt. Может быть, Carbon не делает это автоматически?Кроме того, в своих тестах они действительно не проверяют его с помощью реального часового пояса, но вручную: https://github.com/briannesbitt/Carbon/blob/master/tests/Carbon/DayOfWeekModifiersTest.php – Sw0ut