php - 根据语言环境查找第一周和最后一周

标签 php datetime localization

我正在尝试根据语言环境查找第一周和最后一周。

在美国,一周通常从星期日开始,但在其他国家/地区可能从另一天开始 - 例如星期一甚至星期六。

setlocale(LC_ALL, "en_US.UTF-8");
date_default_timezone_set("America/New_York");

$start_week = (new DateTimeImmutable());
$start_week = $start_week->modify('this week');
$end_week = $start_week->modify('this week +6 days');

$interval = new DateInterval('P1D');
$week_range = new DatePeriod($start_week, $interval, $end_week);

foreach($week_range as $week_day) {
  // $week_day starts with Monday, supposed to be Sunday
}

最佳答案

一种方法是使用 IntlCalendar类(class)。它有一个方法 getFirstDayofWeek() ,它返回一个整数,对应于 IntlCalendar 中的 DOW_ 常量:

const integer DOW_SUNDAY = 1 ;
const integer DOW_MONDAY = 2 ;
const integer DOW_TUESDAY = 3 ;
const integer DOW_WEDNESDAY = 4 ;
const integer DOW_THURSDAY = 5 ;
const integer DOW_FRIDAY = 6 ;
const integer DOW_SATURDAY = 7 ;

在为开始日调用 DateTimeImmutable::modify() 时,使用它来将天数添加到开始日。在 this phpfiddle 中查看三个语言环境(即 en_USes_ESsw_KE)的实际效果.

$locale = 'es_ES'; //Spain Spanish locale
$cal1 = IntlCalendar::createInstance(NULL, $locale);
$firstDayOfWeek = $cal1->getFirstDayOfWeek();
$daysToAdd = $firstDayOfWeek - 2; //difference from US M-Sunday 
echo 'locale: '.$local.' first day of week: '.$cal1->getFirstDayOfWeek().' days to add: '.$daysToAdd.'<br />';
$start_week = new DateTimeImmutable();
$start_week = $start_week->modify('this week +'.$daysToAdd.' days');
$end_week = $start_week->modify('+6 days');
$interval = new DateInterval('P1D');
$week_range = new DatePeriod($start_week, $interval, $end_week);

foreach($week_range as $week_day) {
    echo 'week day: '.$week_day->format('l m/d/Y').'<br />';
}

关于php - 根据语言环境查找第一周和最后一周,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40893629/

相关文章:

Xcode 不会从 xibs 导出字符串进行本地化

windows - 有什么方法可以在您自己的应用程序中使用 Windows 本地化数据吗?

php - 如何禁用在 Laravel Jetstream 中为新注册用户创建新团队的功能?

php - 如果 session auth=1 则无法找出回显文本,否则回显文本 2

php - 将值从一个数据库更新到另一个数据库 - 最快的方法

c# - 在字符串数组中查找下一个可用日期

r - 如何在 R 中将山区标准时间 (MST) 转换为山区夏令时间 (MDT)

cakephp - DART本地化库消息在编译版本中不起作用

php - 选择数组()

c# - 使用从数据库检索的 DateTime 进行减法给出奇怪的结果