问题 从两个日期的范围中查找工作日的日期


$start_date = "2013-05-01";
$last_date = "2013-08-30";

我怎样才能在这两个日期之间得到星期二和星期六的日期?


2417
2018-05-08 12:22


起源



答案:


<?php
$start    = new DateTime('2013-05-01');
$end      = new DateTime('2013-08-30');
$interval = DateInterval::createFromDateString('1 day');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt) {
    if ($dt->format("N") == 2 || $dt->format("N") == 4) {
        echo $dt->format("l Y-m-d") . "<br>\n";
    }
}

看到它在行动


9
2018-05-08 12:26





一些PHP-Fu

$start_date = '2013-05-01';
$last_date = '2013-08-30';

$dates = range(strtotime($start_date), strtotime($last_date),86400);
$days = array('tuesday' => array(), 'thursday' => array());

array_map(function($v)use(&$days){
        if(date('D', $v) == 'Tue'){
            $days['tuesday'][] = date('Y-m-d', $v);
        }elseif(date('D', $v) == 'Thu'){
            $days['thursday'][] = date('Y-m-d', $v);
        }
    }, $dates); // Requires PHP 5.3+

print_r($days);

产量

Array
(
    [tuesday] => Array
        (
            [0] => 2013-05-07
            [1] => 2013-05-14
            [2] => 2013-05-21
            [3] => 2013-05-28
            [4] => 2013-06-04
            [5] => 2013-06-11
            [6] => 2013-06-18
            [7] => 2013-06-25
            [8] => 2013-07-02
            [9] => 2013-07-09
            [10] => 2013-07-16
            [11] => 2013-07-23
            [12] => 2013-07-30
            [13] => 2013-08-06
            [14] => 2013-08-13
            [15] => 2013-08-20
            [16] => 2013-08-27
        )

    [thursday] => Array
        (
            [0] => 2013-05-02
            [1] => 2013-05-09
            [2] => 2013-05-16
            [3] => 2013-05-23
            [4] => 2013-05-30
            [5] => 2013-06-06
            [6] => 2013-06-13
            [7] => 2013-06-20
            [8] => 2013-06-27
            [9] => 2013-07-04
            [10] => 2013-07-11
            [11] => 2013-07-18
            [12] => 2013-07-25
            [13] => 2013-08-01
            [14] => 2013-08-08
            [15] => 2013-08-15
            [16] => 2013-08-22
            [17] => 2013-08-29
        )

)

在线演示


4
2018-05-08 12:33



没什么好友的。很好的答案 - Vinoth Babu


答案:


<?php
$start    = new DateTime('2013-05-01');
$end      = new DateTime('2013-08-30');
$interval = DateInterval::createFromDateString('1 day');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt) {
    if ($dt->format("N") == 2 || $dt->format("N") == 4) {
        echo $dt->format("l Y-m-d") . "<br>\n";
    }
}

看到它在行动


9
2018-05-08 12:26





一些PHP-Fu

$start_date = '2013-05-01';
$last_date = '2013-08-30';

$dates = range(strtotime($start_date), strtotime($last_date),86400);
$days = array('tuesday' => array(), 'thursday' => array());

array_map(function($v)use(&$days){
        if(date('D', $v) == 'Tue'){
            $days['tuesday'][] = date('Y-m-d', $v);
        }elseif(date('D', $v) == 'Thu'){
            $days['thursday'][] = date('Y-m-d', $v);
        }
    }, $dates); // Requires PHP 5.3+

print_r($days);

产量

Array
(
    [tuesday] => Array
        (
            [0] => 2013-05-07
            [1] => 2013-05-14
            [2] => 2013-05-21
            [3] => 2013-05-28
            [4] => 2013-06-04
            [5] => 2013-06-11
            [6] => 2013-06-18
            [7] => 2013-06-25
            [8] => 2013-07-02
            [9] => 2013-07-09
            [10] => 2013-07-16
            [11] => 2013-07-23
            [12] => 2013-07-30
            [13] => 2013-08-06
            [14] => 2013-08-13
            [15] => 2013-08-20
            [16] => 2013-08-27
        )

    [thursday] => Array
        (
            [0] => 2013-05-02
            [1] => 2013-05-09
            [2] => 2013-05-16
            [3] => 2013-05-23
            [4] => 2013-05-30
            [5] => 2013-06-06
            [6] => 2013-06-13
            [7] => 2013-06-20
            [8] => 2013-06-27
            [9] => 2013-07-04
            [10] => 2013-07-11
            [11] => 2013-07-18
            [12] => 2013-07-25
            [13] => 2013-08-01
            [14] => 2013-08-08
            [15] => 2013-08-15
            [16] => 2013-08-22
            [17] => 2013-08-29
        )

)

在线演示


4
2018-05-08 12:33



没什么好友的。很好的答案 - Vinoth Babu


$start_date = strtotime("2013-05-01");
$last_date = strtotime("2013-08-30");
while ($start_date <= $last_date) {
    $start_date = strtotime('+1 day', $start_date);
    if (date('N',$start_date) == 2 || date('N',$start_date) == 4){
        echo date('Y-m-d', $start_date).PHP_EOL;
    }
}

2
2018-05-08 12:27



它很棒,谢谢! - Steffi
@Steffi请你能在你的答案上标明答案 上一个问题 如果有的话?谢谢 :) - Jimbo


<?php echo date('Y-m-d', strtotime('next thursday', strtotime($start_date))); 

也适用于星期二的课程


1
2018-05-08 12:26





请使用以下功能为您的解决方案,

 function daycount($day, $startdate, $lastdate, $counter=0)
    {
        if($startdate >= $lastdate)
        {
            return $counter;
        }
        else
        {
            return daycount($day, strtotime("next ".$day, $startdate), ++$counter);
        }
    }

$start_date = "2013-05-01";
$last_date = "2013-08-30";

echo "Tuesday Count - ".daycount("tuesday", strtotime($start_date), strtotime($last_date));
echo "<br/>";
echo "Thursday Count - ".daycount("thursday", strtotime($start_date), strtotime($last_date));

1
2018-05-08 12:31





试试这个

$startDate = strtotime($start_date);
$endDate = strtotime($last_date);
while ($startDate < $endDate) {
    echo date('Y-m-d', $startDate ). "\n";
    // Give the condition to find last Tuesday
    $startDate = strtotime( 'next Tuesday', $startDate );
}

0
2018-05-08 12:26



你试过我的ans .. ?? - Gautam3164


约会时间

$start_date = "2013-05-01";
$last_date = "2013-08-30";

$start = new DateTime($start_date);
$clone = clone $start;

$start->modify('next thursday');
$thursday=$start->format('Y-m-d');

$clone->modify('next tuesday');
$tuesday=$clone->format('Y-m-d');

echo $thursday; //2013-05-02
echo $tuesday; //2013-05-07

我们需要对象,因为如果在间隔 tuesday 在此之前 thursday 我们接下来会有 tuesday。但是你可以修改一些代码来使用一个对象。


0
2018-05-08 12:35





在几个php日期函数的帮助下,这可以很容易地解决..

<?php

// Create the from and to date
$start_date = strtotime("2013-05-01");
$last_date  = strtotime("2013-08-30");

// Get the time interval to get the tue and Thurs days
$no_of_days = ($last_date - $start_date) / 86400; //the diff will be in timestamp hence dividing by timestamp for one day = 86400
$get_tue_thu_days = array();

// Loop upto the $no_of_days
for($i = 0; $i < $no_of_days; $i++) {
    $temp = date("D", $start_date);
    if($temp == "Tue" || $temp == "Thu") {
      $get_tue_thu_days[] = date("D/M/Y", $start_date); //formating date in Thu/May/2013 formate.
    }
    $start_date += 86400;
}

print_r($get_tue_thu_days);

0
2018-05-08 13:16





如果你有一个参考日期,你知道是星期二/星期四,你可以找到自你参考日期起7天的天数,这些天总是在一周的同一天。


-1
2018-05-08 12:24



我需要一个代码(PHP)来查找这两个日期之间的星期二和星期六的所有日期。 - yajay