pufAmuf
pufAmuf

Reputation: 7805

Take current datetime and make 2 datetime variables? (6AM - 5:59AM)

I'm trying to make an events page and I want to create 2 datetime variables. They would take the current time, and create one variable at 06:00 am, and one at 05:59 am.

The issue I'm having though is with the calculations.

If a person is visiting the page on March 17, 11PM - then var1 would be March 17 06:00AM, and var 2 March 18 05:59AM.

However if a person is viewing the page on March 18 01:00 AM, then var 1 would still be March 17 06:00AM, the same goes for var2.

How would I take the below $date variable, and do the calculations for the other 2 variables?

date_default_timezone_set('America/New_York');
$date = date('Y-m-d H:i:s', time());

Upvotes: 1

Views: 637

Answers (2)

Jon
Jon

Reputation: 437814

You can simply query the current hour to see if it's less than 6; if it is, then the start of the current logical day (based on your rules) was yesterday, 6am; otherwise it was today, 6am. Given this, strtotime can trivially get you the "start" time and adding a day to that gives you the "end" time.

date_default_timezone_set('America/New_York');
$currentHour = date('H');
if ($currentHour < 6) {
    // logical day started yesterday
    $start = strtotime('yesterday 06:00');
    $end = strtotime('today 05:59:59');
}
else {
    // logical day started today
    $start = strtotime('today 06:00');
    $end = strtotime('tomorrow 05:59:59');
}

echo "The current logical day started on ".date('Y-m-d H:i:s', $start);
echo " and it ends on ".date('Y-m-d H:i:s', $end);

Upvotes: 3

Billy Moon
Billy Moon

Reputation: 58619

The method for chopping the date up could be improved, but the principle works...

<?php
  date_default_timezone_set('America/New_York');
  $date = date('Y-m-d H:i:s', time());

  // get adjusted date which subtracts 6 hours
  $date_adjusted = date('Y-m-d H:i:s', time() - 60 * 60 * 6);

  // chop off the time (so we are always left with the correct date now)
  $date_adjusted_date = preg_split("/ /",$date_adjusted);

  // Add the time element (in this case 6 AM)
  $correct_date = date('Y-m-d H:i:s', strtotime($date_adjusted_date[0]."T06:00:00"));

  // check the result
  echo $correct_date;
?>

Upvotes: 1

Related Questions