naeplus
naeplus

Reputation: 121

Reverse whole date in php

OK,

i was using following code to reverse a date to use in php yesterday.

<?php
$d=date("F j Y");
$d=explode(" ", $d);
$month=$d[0];
$day=$d[1];
$year=$d[2];
<?php for ($i=10; $i>0; $i--)
{
      $date=$month."-".$day--."-".$year;
      echo $date;
?>

this was working for me till yesterday 31 March Night. but in the morning on april 1 its started printing

April-1-2012

April-0-2012

April--1-2012 April--2-2012

and so on.

this was the bad logic i used to reverse a date. i realized it soon. i want this like following.

April-1-2012

March-31-2012

March-30-2012

March-29-2012

and so on

so how this could be possible ?

Thanks in advance.


Well, this also a logic that work perfect for me i made after post of question. but i am really thankful for all answers. that also making me many things clear.

<?php
$d=date("F j Y");
 for ($i=0; $i>-10; $i--)
 {
$date="<br>".date('F-j-Y', strtotime("+$i days"));
echo $date;
}
?>

Upvotes: 0

Views: 798

Answers (3)

Gohn67
Gohn67

Reputation: 10648

If you are using PHP5.2, you can use the DateTime Class and the modify method.

http://www.php.net/manual/en/datetime.modify.php

<?php
$date = new DateTime('2006-12-12');
$date->modify('-1 day');
echo $date->format('F-j-Y');
?>

In 5.3, you can use the sub method in the DateTime class: http://www.php.net/manual/en/datetime.sub.php

<?php
$date = new DateTime('2000-01-20');
$date->sub(new DateInterval('P1D'));
echo $date->format('F-j-Y');
?>

So an example, using the PHP 5.2 DateTime class (example here: http://ideone.com/uwkjj):

$date = new DateTime();
echo $date->format('F-j-Y');
for($i = 0; $i < 10; $i++){
    $date->modify('-1 day');
    echo $date->format('F-j-Y');
}

And here is an example using PHP5.3 DateTime class with the sub method

$date = new DateTime();
echo $date->format('F-j-Y');
for($i = 0; $i < 9; $i++){
    $date->sub(new DateInterval('P1D'));
    echo $date->format('F-j-Y');
}

There is also an interesting note on the PHP help page for strtotime: http://www.php.net/manual/en/function.strtotime.php that says not to use it for mathematical operations. I wonder what that means. But I guess subtracting 1 day should be fine.

From PHP manual:

Using this function for mathematical operations is not advisable. It is better to use DateTime::add() and DateTime::sub() in PHP 5.3 and later, or DateTime::modify() in PHP 5.2.

Upvotes: 1

Starx
Starx

Reputation: 79049

This is probably the quickest way to do it

for($i=1; $i <= 10; $i++) {
    echo date("F j Y", time()-($i*24*60*60)); //Instead of 24*60*60 write 86400 to increase slight performance
}

Demo

Upvotes: 3

Michael
Michael

Reputation: 12836

To get an incremental decrease:

$date = date("F j Y");

for ($i = 0; $i < 10; ++$i)
{
  $dates[] = date("F-j-Y", strtotime($date . ' - ' . $i . ' day'));
}

Upvotes: 2

Related Questions