如何确定一周的第一天是星期六,星期日还是星期一?

时间:2020-09-24 23:57:50

标签: php date

什么是我的PHP应用程序无需依赖依赖的解决方案,以检测运行中的php进程一周的第一天?示例:

  • 星期六(中东周日历)
  • 周日(西周日历)
  • 星期一(ISO-8601日历日历)。

我已经尝试过了:

$first_day_of_week = date('l', strtotime('This week'));

我希望代码对美国用户返回星期日,对欧洲用户返回星期一。但是它总是返回星期一(ISO-8601星期日历)。

2 个答案:

答案 0 :(得分:0)

尽管不是依赖依赖的解决方案。这是使用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);
}

答案 1 :(得分:0)

返回的一周的第一天

$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

无论如何,以下内容适用于date和DateTime:

在PHP日期函数中,每周的开始始终是ISO-8601。

(已在评论中指出)