如何检测一周中的第一天是周六、周日还是周一



对于我的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。

(如评论中所述(

相关内容

最新更新