在 PHP 中获取星期几及其周数
Get days of the week and their week number in PHP
我是 PHP 的新手,不知道我的请求是否可行:
我需要获取一个包含当前星期几的数组,并指出每一天是该日期在该月的第一次、第二次、第三次、第四次还是第五次出现。
例子
对于 2016 年 8 月的第一周,它将是:
monday1
tuesday1
wednesday1
thursday1
friday1
saturday1
sunday1
但对于 2016 年 8 月的最后一周(从 8 月开始到 9 月结束),它将是:
monday5
tuesday5
wednesday1
thursday1
friday1
saturday1
sunday1
我试过了,但它只适用于当天。
$week_of_the_month = ceil(date('d', $time)/7);
$jd = cal_to_jd(CAL_GREGORIAN,date("m"),date("d"),date("Y"));
echo jddayofweek($jd,1).$week_of_the_month;
$d = new DateTime();
$days = [];
for ($i = 0; $i < 7; $i++) {
$date = $d->format('j');
$days[$date] = $d->format('l - ') . ceil($date/7);
$d->add(new DateInterval('P1D'));
}
这将适用于当前日期,但您可以通过设置特定日期来在跨越两个月的几周内对其进行测试:
$d = new DateTime('2016-08-31');
结果如下:
print_r($days);
Array
(
[31] => Wednesday - 5
[1] => Thursday - 1
[2] => Friday - 1
[3] => Saturday - 1
[4] => Sunday - 1
[5] => Monday - 1
[6] => Tuesday - 1
)
如果您希望日期始终从本周的星期一开始,DateTime
构造函数允许您传入这样的字符串:
$d = new DateTime('monday this week');
今天是星期四,但它给出:
Array
(
[1] => Monday - 1
[2] => Tuesday - 1
[3] => Wednesday - 1
[4] => Thursday - 1
[5] => Friday - 1
[6] => Saturday - 1
[7] => Sunday - 1
)
更改语言
如果您想更改日期输出的语言,那是一个单独的主题 (see here)。您需要在系统上安装 locales/extensions。如果你不想走那条路,你可以自己将日子映射到你的语言中:
$intlDays = [
'Monday' => 'Lundi',
'Tuesday' => 'Mardi',
'Wednesday' => 'Mercredi',
'Thursday' => 'Jeudi',
'Friday' => 'Vendredi',
'Saturday' => 'Samedi',
'Sunday' => 'Dimanche'
];
$d = new DateTime('monday this week');
$days = [];
for ($i = 0; $i < 7; $i++) {
$date = $d->format('j');
$output = $d->format('l - ') . ceil($date/7);
$output = str_replace(array_keys($intlDays), $intlDays, $output);
$days[$date] = $output;
$d->add(new DateInterval('P1D'));
}
我是 PHP 的新手,不知道我的请求是否可行:
我需要获取一个包含当前星期几的数组,并指出每一天是该日期在该月的第一次、第二次、第三次、第四次还是第五次出现。
例子
对于 2016 年 8 月的第一周,它将是:
monday1
tuesday1
wednesday1
thursday1
friday1
saturday1
sunday1
但对于 2016 年 8 月的最后一周(从 8 月开始到 9 月结束),它将是:
monday5
tuesday5
wednesday1
thursday1
friday1
saturday1
sunday1
我试过了,但它只适用于当天。
$week_of_the_month = ceil(date('d', $time)/7);
$jd = cal_to_jd(CAL_GREGORIAN,date("m"),date("d"),date("Y"));
echo jddayofweek($jd,1).$week_of_the_month;
$d = new DateTime();
$days = [];
for ($i = 0; $i < 7; $i++) {
$date = $d->format('j');
$days[$date] = $d->format('l - ') . ceil($date/7);
$d->add(new DateInterval('P1D'));
}
这将适用于当前日期,但您可以通过设置特定日期来在跨越两个月的几周内对其进行测试:
$d = new DateTime('2016-08-31');
结果如下:
print_r($days);
Array
(
[31] => Wednesday - 5
[1] => Thursday - 1
[2] => Friday - 1
[3] => Saturday - 1
[4] => Sunday - 1
[5] => Monday - 1
[6] => Tuesday - 1
)
如果您希望日期始终从本周的星期一开始,DateTime
构造函数允许您传入这样的字符串:
$d = new DateTime('monday this week');
今天是星期四,但它给出:
Array
(
[1] => Monday - 1
[2] => Tuesday - 1
[3] => Wednesday - 1
[4] => Thursday - 1
[5] => Friday - 1
[6] => Saturday - 1
[7] => Sunday - 1
)
更改语言
如果您想更改日期输出的语言,那是一个单独的主题 (see here)。您需要在系统上安装 locales/extensions。如果你不想走那条路,你可以自己将日子映射到你的语言中:
$intlDays = [
'Monday' => 'Lundi',
'Tuesday' => 'Mardi',
'Wednesday' => 'Mercredi',
'Thursday' => 'Jeudi',
'Friday' => 'Vendredi',
'Saturday' => 'Samedi',
'Sunday' => 'Dimanche'
];
$d = new DateTime('monday this week');
$days = [];
for ($i = 0; $i < 7; $i++) {
$date = $d->format('j');
$output = $d->format('l - ') . ceil($date/7);
$output = str_replace(array_keys($intlDays), $intlDays, $output);
$days[$date] = $output;
$d->add(new DateInterval('P1D'));
}