zellking
zellking

Reputation: 21

PHP Incrementing date with day name

I am currently attempting to get a list of dates from a current date using the following format so that I can process it and stick it in my database
Saturday/02-05-2015

So far, i've managed to get the system to output the date correctly, but can not get it to increment in single day values. My current code to attempt to increment this is the following

$tempStartDateN = ("$splode[0]/$splode[1]/$splode[2]/$splode[3]");  
echo $tempStartDateN;  
$tempStartDateN = date('l/d/m/Y', strtotime($tempStartDateN . ' + 1 day'));  
echo $tempStartDateN;  

I am currently using explode to process the data after the increment, which works fine, but can not get the date itself to increment as long as the day name is included.

Currently, the time is got using this code, which is processed afterwords using explode

$OldDateArray = date("Y/m/d/l");  

So to keep a long question short, what is the best way to increment a date that requires the day name, day, month then year?

EDIT:
Heres my current code, managed to get this far thanks to SamV

$date = date("l/d/m/Y");
echo $date;
echo ('</br>');
list($weekdayName, $dateString) = explode("/", $date, 2);
$dateObj = new \DateTime($dateString);
for($i=0; $i<=5; $i++){
$dateObj->add(new \DateInterval("P1D")); // P1D stands for "Period 1 Day"
echo $dateObj->format("l/d/m/Y"); // Sunday/03/05/2015
echo ('</br>');
}  

What this does however is:

Friday/01/05/2015
Tuesday/06/01/2015
Wednesday/07/01/2015
Thursday/08/01/2015
Friday/09/01/2015
Saturday/10/01/2015
Sunday/11/01/2015  

this means that date and month are swapping around, what is causing this?

Upvotes: 2

Views: 343

Answers (2)

SamV
SamV

Reputation: 7586

You don't need to parse the week day name to add days onto a date.

$date = "Saturday/02-05-2015";

list($weekdayName, $dateString) = explode("/", $date, 2); // Parse "02-05-2015"

$dateObj = new \DateTime($dateString);

$dateObj->add(new \DateInterval("P1D")); // P1D stands for "Period 1 Day"

echo $dateObj->format("l/d/m/Y"); // Sunday/03/05/2015

I used the DateTime class, here is the documentation.

I wrote out what you are trying to do yourself, not sure what is causing your issue. This code works though.

$date = "Friday/01-05-2015";

list($weekdayName, $dateString) = explode("/", $date, 2); // Parse "01-05-2015"

$dateObj = new \DateTime($dateString);

for($i = 0; $i < 5; $i++) {
    $dateObj->add(new \DateInterval("P1D")); // P1D stands for "Period 1 Day"
    echo $dateObj->format("l/d/m/Y") . '<br>';
}

Outputs:

Saturday/02/05/2015
Sunday/03/05/2015
Monday/04/05/2015
Tuesday/05/05/2015
Wednesday/06/05/2015

Upvotes: 2

Sergiy T.
Sergiy T.

Reputation: 1453

If strtotime is able to parse a date it returns the timestamp. Why not add to it the number of seconds in a day? Smth. like $timestamp += 24 * 3600;

P.S. As far as I can understand, strtotime may accept timestamp as second argument (https://www.php.net/manual/en/function.strtotime.php) smth. like $timestamp = strtotime('+1 day', $timestamp);

Upvotes: 0

Related Questions