sasori
sasori

Reputation: 5463

how to manipulate back date and exclude saturday and sunday?

How to manipulate the date and exclude saturday and sunday?. The objective is, I need to create a cron job that will run and execute on datas that were created 5 days ago,"BUT", saturday and sunday shouldn't be included in that 5 days period.

here's what I have so far

$numdays = 5;
$today = strtotime('now');
$start = date('Y-m-d',strtotime('-'.$numdays.' day',$today));
echo $start;

if you try to run my code snippet above, it will show you the exact date 5 days ago 2016-02-10. But that one doesn't "exclude" saturday and sunday in the computation. it should be be 2016-02-08. So how to do that?

Upvotes: 2

Views: 75

Answers (2)

hasumedic
hasumedic

Reputation: 2167

You can get a whole week and discard the weekends, keeping the furthest element in the array as a result.

$days = array_filter(array_map(function ($daysBack) {
    $date = new \DateTimeImmutable("$daysBack days ago", new \DateTimeZone('UTC'));
    return (!in_array($date->format('N'), [6, 7])) ? $date : null;
}, Range(1, 7)));

$fiveWorkingDaysAgo = end($days);

Upvotes: -1

Aziz Saleh
Aziz Saleh

Reputation: 2707

You can use PHP's date week of day, there are several versions, here is one using N:

<?php

$current  = new DateTime();
$interval = new DateInterval('P1D');

$x = 5;
while ($x > 1) {
    // Check if day of week is not saturday/sunday (1 => Monday ... 7 -> Sunday)
    if ($current->format('N') >= 6) {
        $x++;
    }
    $current->sub($interval);
    $x--;
}

echo $current->format('Y-m-d') . PHP_EOL;

Example Run.

Upvotes: 3

Related Questions