首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP每周日期范围,具有特定的开始日期和结束日期

PHP每周日期范围,具有特定的开始日期和结束日期
EN

Stack Overflow用户
提问于 2017-03-16 09:50:40
回答 3查看 1.2K关注 0票数 0

嗨,我已经有了日期范围结果,但是我如何才能使日期范围从每个星期四开始到星期三结束。感谢您的帮助:)

代码语言:javascript
复制
$week_range = '';
for ($i = 0; $i <= 4; $i++) {
    $k = $i - 1;

    $ymd_week_range = date('Y-m-d', strtotime("-$i week")) . ',' . date('Y-m-d', strtotime("-$k week -1 day"));

    $day_from = date('j', strtotime("-$i week"));
    $day_to = date('j', strtotime("-$k week -1 day"));
    $month_to = date('M', strtotime("-$i week"));
    $month_from = date('M', strtotime("-$k week -1 day"));
    $year_to = date('Y', strtotime("-$i week"));
    $year_from = date('Y', strtotime("-$k week -1 day"));

    $weeks[$ymd_week_range] = "$month_from $day_from-$day_to, $year_to";   
}



Array
    (
        [2017-03-16,2017-03-22] => Mar 16-22, 2017
        [2017-03-09,2017-03-15] => Mar 9-15, 2017
        [2017-03-02,2017-03-08] => Mar 2-8, 2017
        [2017-02-23,2017-03-01] => Mar 23-1, 2017
        [2017-02-16,2017-02-22] => Feb 16-22, 2017
    )

所以今天是星期四所以是对的。但如果今天是星期五,那么结果就错了。如果今天是星期五,我想要上面的正确结果。错误的结果是:

代码语言:javascript
复制
Array
        (
            [2017-03-17,2017-03-23] => Mar 17-23, 2017
            [2017-03-10,2017-03-16] => Mar 10-16, 2017
            [2017-03-03,2017-03-09] => Mar 3-9, 2017
            [2017-02-24,2017-03-02] => Mar 24-2, 2017
            [2017-02-17,2017-02-23] => Feb 17-23, 2017
        )
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-16 10:33:31

你可以使用下面的代码,和你的方法一样

代码语言:javascript
复制
<?php
$weeks = array();
$dayOfWeek = date('w');
$thurday = 4;
$diff = $thurday - $dayOfWeek;

for ($i = 0; $i <= 4; $i++) {
    $k = $i - 1;

    $ymd_week_range = date('Y-m-d', strtotime("-$i week")) . ',' . date('Y-m-d', strtotime("-$k week -1 day"));

    $day_from = date('j', strtotime("-$i week $diff day"));
    $day_to = date('j', strtotime("-$k week ".($diff - 1)." day"));
    $month_to = date('M', strtotime("-$i week $diff day"));
    $month_from = date('M', strtotime("-$k week ".($diff - 1)." day"));
    $year_to = date('Y', strtotime("-$i week $diff day"));
    $year_from = date('Y', strtotime("-$k week ".($diff - 1)." day"));

    $weeks[$ymd_week_range] = "$month_from $day_from-$day_to, $year_to";   
}

print_r($weeks);
票数 1
EN

Stack Overflow用户

发布于 2017-03-16 10:16:20

使用date()strtotime()是很痛苦的。使用DateTime() and its associated classes使其更容易理解。

在下面的示例中,我使用了相对日期/时间格式,这允许我将星期四指定为结束日期。然后我回到六周前,设定开始日期和间隔一周。然后我循环遍历它们,并将它们放入一个数组中。我反转数组并将其打印出来。

代码语言:javascript
复制
$dates    = [];
$end      = new DateTimeImmutable('Thursday');
$start    = $end->modify('-6 weeks');
$interval = new DateInterval('P1W');
$period   = new DatePeriod($start, $interval, $end);
foreach ($period as $date) {
    $wednesday = $date->modify('Wednesday');
    $dates[] = sprintf('%s - %s%s', $date->format('D j M'), $wednesday->format('D j M'), PHP_EOL);
}
$dates = array_reverse($dates);
foreach ($dates  as $week) {
    echo $week;
}

Demo

代码语言:javascript
复制
Thu 9 Mar - Wed 15 Mar
Thu 2 Mar - Wed 8 Mar
Thu 23 Feb - Wed 1 Mar
Thu 16 Feb - Wed 22 Feb
Thu 9 Feb - Wed 15 Feb
Thu 2 Feb - Wed 8 Feb

显然,您可以更改格式以满足您的需要。

票数 2
EN

Stack Overflow用户

发布于 2017-03-16 10:35:16

这是我根据之前的错误代码修改后的正确答案:

代码语言:javascript
复制
<?php
for ($i = 0; $i <= 4; $i++) {
    $k = $i - 1;

    $from_text = strtotime("this week thursday -$i week");
    $to_text = strtotime("-$k week -1 day");

    $ymd_week_range = date('Y-m-d', $from_text) . ',' . date('Y-m-d', $to_text);

    $day_from = date('j', $from_text);
    $day_to = date('j', $to_text);

    $month_from = date('M', $from_text);
    $month_to = date('M', $to_text);

    $year_from = date('Y', $from_text);
    $year_to = date('Y', $to_text);

    $weeks[$ymd_week_range] = "$month_from $day_from - $month_to $day_to, $year_to";
}

我更改了我的笔记本电脑日期,并将其设置为明天(星期五),使用上面的代码,结果现在是正确的:

结果:

代码语言:javascript
复制
Array
(
    [2017-03-16,2017-03-23] => Mar 16 - Mar 23, 2017
    [2017-03-09,2017-03-16] => Mar 9 - Mar 16, 2017
    [2017-03-02,2017-03-09] => Mar 2 - Mar 9, 2017
    [2017-02-23,2017-03-02] => Feb 23 - Mar 2, 2017
    [2017-02-16,2017-02-23] => Feb 16 - Feb 23, 2017
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42823926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档