【问题标题】:Get days of the week and their week number in PHP在 PHP 中获取星期几及其星期数
【发布时间】:2016-08-02 14:33:37
【问题描述】:

我是 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;

【问题讨论】:

  • 嗨,向我们展示您在代码中所做的工作很重要,然后我们可以为您找出解决方案
  • 到目前为止您尝试过什么?我们不是来从头开始编写代码的。向我们展示您尝试过的代码。
  • 是的,这是可能的,但正如@MueyiwaMosesIkomi 所说,您最好向我们展示您的作品。
  • 对不起,我是新手,我只知道今天如何获得:$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;

标签: php week-number


【解决方案1】:
$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)。您需要在系统上安装语言环境/扩展。如果你不想走那条路,你可以自己把日子映射成你的语言:

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

【讨论】:

  • 我尝试使用当前日期 '$d = new DateTime('2016-08-03');'我得到:数组( [4] => 星期四 - 1 [5] => 星期五 - 1 [6] => 星期六 - 1 [7] => 星期日 - 1 [8] => 星期一 - 2 [9] = > 星期二 - 2 [10] => 星期三 - 2 ) 而不是:数组 ( [4] => 星期一 - 1 [5] => 星期二 - 1 [6] => 星期三 - 1 [7] => 星期四 - 1 [8] => 星期五 - 1 [9] => 星期六 - 1 [10] => 星期日 - 1 ) 我总是需要从星期一到星期日相对于当前日期的日期谢谢
  • 实际上我需要知道当前一周的每一天,如果每一天是每月的第一天、第二天、第三天、第四天或第五天。我的一周从星期一开始。谢谢
  • 例如,对于 $d = new DateTime('2016-08-30'),我需要:星期一 5、星期二 5、星期三 5、星期四 1、星期五 1、星期六-1,星期日-1
  • $d = new DateTime('2016-08-28');但不适用于 $d = new DateTime('2016-08-29') 例如(我需要从星期一开始)
  • 如果当天不是星期一,我想 DateInterval 应该修改为获取前几天,不是吗?谢谢
猜你喜欢
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 2023-01-03
  • 2015-03-29
相关资源
最近更新 更多