Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP每周日期范围,包括具体的开始和结束日期_Php_Date_Strtotime_Date Range - Fatal编程技术网

PHP每周日期范围,包括具体的开始和结束日期

PHP每周日期范围,包括具体的开始和结束日期,php,date,strtotime,date-range,Php,Date,Strtotime,Date Range,嗨,我已经有了一个日期范围的结果,但是我如何才能使日期范围从每周四开始,到周三结束。谢谢你的帮助:) 使用date()和strotime()看到这一点很痛苦。使用可使其更易于理解 在下面的示例中,我使用相对日期/时间格式,它允许我将星期四指定为结束日期。然后我回到六周前,确定开始日期,间隔一周。然后我循环遍历它们并将它们放入一个数组中。我反转数组并打印出来 $dates = []; $end = new DateTimeImmutable('Thursday'); $start

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


使用
date()
strotime()
看到这一点很痛苦。使用可使其更易于理解

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

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


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

使用
date()
strotime()
看到这种情况很痛苦。使用可使其更易于理解

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

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


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

您可以使用下面的代码,方法相同

<?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);

您可以使用下面的代码,方法相同

<?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);

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

<?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";
}

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

<?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";
}

请尝试以
strotime(“下周四”)开始。
尝试以
strotime(“下周四”)开始。
谢谢John,但您的代码不正确。我现在就去修。我已经做了正确的原始代码。我现在就发布我的答案。顺便说一下,开始日期是本周的星期四,结束日期是下周的星期三。此代码每周从星期四开始,到星期三结束。这就是你所说的你想要的。很抱歉,我可能忽略了你的代码,但结果中唯一缺少的是第一行中的“2017年3月16日-2017年3月22日”。总的来说,你的答案也是正确的。谢谢John,但是你的代码是错误的。我现在就去修。我已经做了正确的原始代码。我现在就发布我的答案。顺便说一下,开始日期是本周的星期四,结束日期是下周的星期三。此代码每周从星期四开始,到星期三结束。这就是你所说的你想要的。很抱歉,我可能忽略了你的代码,但结果中唯一缺少的是第一行中的“2017年3月16日-2017年3月22日”。总的来说,你的答案也是正确的。当今天是星期三时,代码是错误的。这是结果,谢谢@PhuDuy注意到这一点。对不起,我没有注意到那个错误。我现在就试试你的代码。约翰·康德的密码也是正确的。今天是星期三,这个密码是错误的。这是结果,谢谢@PhuDuy注意到这一点。对不起,我没有注意到那个错误。我现在就试试你的代码。约翰·康德的密码也是正确的。
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
)