对于我的PHP应用程序来说,什么是无依赖性的解决方案来检测运行中的PHP进程一周中的第一天?示例:
- 周六(中东周日历(
- 周日(西方周历(
- 星期一(ISO-8601周日历(
我试过这个:
$first_day_of_week = date('l', strtotime('This week'));
我预计美国用户周日返回代码,欧洲用户周一返回代码。但它总是在周一返回(ISO-8601周日历(。
a不是一个无依赖性的解决方案。以下是使用PHP扩展Intl.检测周类型
if (extension_loaded('intl')) {
switch (IntlCalendar::createInstance()->getFirstDayOfWeek()) {
case 1: $first_day_of_week = 'Sunday'; break; // Western
case 2: $first_day_of_week = 'Monday'; break; // ISO-8601
case 7: $first_day_of_week = 'Saturday'; break; // Middle Eastern
}
} else {
trigger_error('PHP is missing the Intl extension', E_USER_WARNING);
}
返回的一周中的第一天
$no = IntlCalendar::createInstance()->getFirstDayOfWeek();
取决于php.ini。您可以使用locale_get_default((获得默认值。IntlCalendar::createInstance((接受一个区域设置作为第二个参数,然后在一周的第一天提供不同的结果。
foreach(['en_AE','en_US','en_GB'] as $locale){
$no = IntlCalendar::createInstance(null,$locale)->getFirstDayOfWeek();
$weekDayName = date('l', strtotime('Saturday +'.$no.' days'));
echo $locale.' : '.$weekDayName.'<br>';
}
输出:
en_AE : Saturday
en_US : Sunday
en_GB : Monday
不管怎样,以下适用于日期和日期时间:
在PHP日期函数中,周的开始总是ISO-8601。
(如评论中所述(