Jump to content

Archived

This topic is now archived and is closed to further replies.

hotliquer

date increment by one day

Recommended Posts

Hi. I am trying to increment a date by one day, that is already set in a variable ($first_date) in this format 2005-04-02

This is the closest I have got so far:

$first_date = $_GET['first_date'];
$first_date = date("Y-m-d", strtotime("+1 day"));


But this to my dismay resets $first_date to today’s current date!

I’m sure this is an easy task for many of you guys. But for me; it’s driving me bonkers!

Thanks

Ben

Share this post


Link to post
Share on other sites
you've got to check whether or not your variable is being set before you can use date/time functions on it... for instance, make sure that $_GET['first_date'] is actually being set and that it is NOT empty:
[code]
<?php
if (isset($_GET['first_date'])) {
  // variable is set
  // default to today's date if the URL variable is empty
  $first_date = !empty($_GET['first_date']) ? $_GET['first_date'] : date('Y-m-d');
  echo date('Y-m-d', strtotime("$first_date +1 day");
} else {
  // variable not set in the URL
}
?>
[/code]

Share this post


Link to post
Share on other sites
The way I have incremented dates is to get the unix timestamp of the first date, then increment it by the number of seconds in one day, and then use the date function to convert it back to Y-m-d or whatever.

Share this post


Link to post
Share on other sites
By default, strtotime() assumes the starting date is today. The second parameter to the function specifies the starting date as UNIX time.

Here's one way of doing what you want:
[code]<?
$first_date = $_GET['first_date'];
$next_date = date("Y-m-d", strtotime("+1 day",strtotime($first_date)));
echo $next_date;
?>[/code]

Ken

Share this post


Link to post
Share on other sites
Guys,

Thanks so much for your time. But I am still having the same problem.

obsidian the $_GET['first_date'] has the date in it, which is 2005-07-21.

Dan R. I will be looking into this one. I have never worked in the UNIX seconds jobby thing yet!

kenrbnsn this is working, but it takes 2005-07-21 and turns it into 2006-04-05.

Here exactly what I am doing. I have a simple form with two fields. I put in two dates i.e. $first_date 2005-07-21 and $second_date 2005-07-21. This accesses the production database with daily production stats for a bunch of glass blowers. It also pumps out what their bonus will be for that day.

So to make it easier for my boss to work out our piece work I want a link on the page, that just increments the date, from the last page, by one day.

So say I am looking at prod stats for 2005-07-21 I want to see this:
[a href=\"http://www.blah.com/employee_prod_stats.php?first_date=2005-07-22&second_date=2005-07-22\" target=\"_blank\"]http://www.blah.com/employee_prod_stats.ph...date=2005-07-22[/a]

But the closest I can get to it is:
[a href=\"http://www.blah.com/employee_prod_stats.php?first_date=2006-04-05&second_date=2006-04-05\" target=\"_blank\"]http://www.blah.com/employee_prod_stats.ph...date=2006-04-05[/a]

I really hope that makes more sense!??

Thanks a huge bunch for your help so far guys

Share this post


Link to post
Share on other sites
[code]$now = time();
$tomorow = date("Y-m-d",$now+(60*60*24));[/code]

Share this post


Link to post
Share on other sites
To the OP, can you post the code you are currently are debugging?

Ken

Share this post


Link to post
Share on other sites
[code]$first_date = $_GET['first_date'];
$next_date = date("Y-m-d", strtotime($first_date)+(60*60*24));
echo $next_date;
[/code]

Is what your looking for.
You was calling strtotime an extra time.

Share this post


Link to post
Share on other sites
[!--quoteo(post=361726:date=Apr 4 2006, 03:41 PM:name=kenrbnsn)--][div class=\'quotetop\']QUOTE(kenrbnsn @ Apr 4 2006, 03:41 PM) [snapback]361726[/snapback][/div][div class=\'quotemain\'][!--quotec--]
To the OP, can you post the code you are currently are debugging?

Ken
[/quote]

Here is the part of code i am debugging.

[code]
$first_date = $_GET['first_date'];
$first_date = $_GET['second_date'];
$increment = date("Y-m-d", strtotime("+1 day",strtotime($first_date)));

?><h4><a href="employee_prod_stats_test.php?first_date=<?php echo $increment; ?>&second_date=<?php echo $increment; ?>">Stats for next day</a></h4><?
[/code]

I cannot post the whole script!? it not to big as i checked. just keep getting error page?

Share this post


Link to post
Share on other sites
[!--quoteo(post=361728:date=Apr 4 2006, 03:56 PM:name=DrDre)--][div class=\'quotetop\']QUOTE(DrDre @ Apr 4 2006, 03:56 PM) [snapback]361728[/snapback][/div][div class=\'quotemain\'][!--quotec--]
[code]$first_date = $_GET['first_date'];
$next_date = date("Y-m-d", strtotime($first_date)+(60*60*24));
echo $next_date;
[/code]

Is what your looking for.
You was calling strtotime an extra time.
[/quote]

This gives me the same problem. it turns 2005-07-21 into 2006-04-05 (tomorrow) when i want it to increment to 2005-07-22.

basically i want to increment, by one day, $first_date.

$first_date will never be today or tomorrow. it will always in the past.

thanks for your halp!

Ben

Share this post


Link to post
Share on other sites
Ok i never used strtotime, it must be as above said and uses current time.


[code]
$first_date = $_GET['first_date'];
$first_date = split('-',$first_date);
$time=mktime(0,0,0,$first_date[1],$first_date[2],$first_date[0]);
$next_date = date("Y-m-d", $time+(60*60*24));
echo $next_date;
[/code]

Splitting the _GET request by - into an array of Array(Year,Month,Day)
And call mktime(hr,min,sec,month,day,year) to find the unix timestamp and then add the 1 day of seconds to it and then back to a Y-m-d format.

Share this post


Link to post
Share on other sites
This code gives the correct answer:
[code]<?php
$first_date = $_GET['first_date'];
$second_date = $_GET['second_date'];
$increment = date("Y-m-d", strtotime("+1 day",strtotime($first_date)));
?>[/code]
I believe your problem occured because you're overlaying the variable $first_date with the value of $_GET['second_date'] in your second line.

To: DrDre, the strtotime() function will take a string and try to convert it into a unix time stamp, so you could pass it something like "July 21, 2006" and it will do the "right thing"

Take a look at the [a href=\"http://www.php.net/strtotime\" target=\"_blank\"]manual page[/a] for it.

Ken

Share this post


Link to post
Share on other sites
[!--quoteo(post=361755:date=Apr 4 2006, 05:10 PM:name=kenrbnsn)--][div class=\'quotetop\']QUOTE(kenrbnsn @ Apr 4 2006, 05:10 PM) [snapback]361755[/snapback][/div][div class=\'quotemain\'][!--quotec--]
This code gives the correct answer:
[code]<?php
$first_date = $_GET['first_date'];
$second_date = $_GET['second_date'];
$increment = date("Y-m-d", strtotime("+1 day",strtotime($first_date)));
?>[/code]
I believe your problem occured because you're overlaying the variable $first_date with the value of $_GET['second_date'] in your second line.

To: DrDre, the strtotime() function will take a string and try to convert it into a unix time stamp, so you could pass it something like "July 21, 2006" and it will do the "right thing"

Take a look at the [a href=\"http://www.php.net/strtotime\" target=\"_blank\"]manual page[/a] for it.

Ken
[/quote]


unfortuatly i am still having the same problem. i must have other issues with the code. the dates i am looking for keep jumping to 2006-04-05. i am guessing that my code is messy or something like that??
but i know when i print $first_date it is 2005-07-21 or any other date i chose, that is in the past.

thanks for the help guys. i dont know what else to try??

Share this post


Link to post
Share on other sites
Did you try mine?

[code]$first_date = $_GET['first_date'];
$first_date = split('-',$first_date);
$time=mktime(0,0,0,$first_date[1],$first_date[2],$first_date[0]);
$next_date = date("Y-m-d", $time+(60*60*24));
echo $next_date;[/code]


Theres absolutely no reason that should not work...

Share this post


Link to post
Share on other sites
[!--quoteo(post=361760:date=Apr 4 2006, 05:35 PM:name=DrDre)--][div class=\'quotetop\']QUOTE(DrDre @ Apr 4 2006, 05:35 PM) [snapback]361760[/snapback][/div][div class=\'quotemain\'][!--quotec--]
Did you try mine?

[code]$first_date = $_GET['first_date'];
$first_date = split('-',$first_date);
$time=mktime(0,0,0,$first_date[1],$first_date[2],$first_date[0]);
$next_date = date("Y-m-d", $time+(60*60*24));
echo $next_date;[/code]
Theres absolutely no reason that should not work...
[/quote]
yes i did try your one. and unfortunatly it turned my date into 1970-01-02

i think my code is pretty screwed. it must be the other code in the script. i am currently trying to build a stock, sales and production database for work. its in early stages so far. i would like to show some one it so they could see what the production thing is doing wrong.

i have copied it here to a folder with out pass word protection:
[code]http://www.bristol-glass.co.uk/production/employee_prod_stats_test.php[/code]

its currently coded to your code, DrDre

Share this post


Link to post
Share on other sites

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.