繁体   English   中英

在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
)

改变语言

如果要更改日期输出的语言,那是一个单独的主题( 请参见此处 )。 您将需要在系统上安装语言环境/扩展名。 如果您不想走那条路,可以自己将日期映射到您的语言中:

$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'));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM