Home > Back-end >  How to get current datetime in order to compare with other date in a specif datetime
How to get current datetime in order to compare with other date in a specif datetime

Time:12-17

I need to compare a datetime field called "last_power" to a specific range time that starts at 7AM every day. For example:

Day starts at 7AM.
NOW() = 2022/12/15 02:40:40 PM || last_power is setting to 2022/12/14 06:40:40 PM -> true
NOW() = 2022/12/15 02:40:40 PM || last_power is setting to 2022/12/15 11:40:40 AM -> false

I'm stucked when "last_power" is between midnight and 6:59 AM.

NOW() = 2022/12/15 12:40:40 AM || last_power is setting to 2022/12/14 01:40:40 AM -> SHOULD BE true because in my code "2022/12/15 12:40:40 AM" is < 7AM of today, but the result give me a false result.

//set
$current = time();  
$new_day = strtotime('today 7:00');  
$date_power = strtotime($last_power);

if ($current - $date_power >= (24 * 60 * 60) || 
   ($date_power < $new_day && $current >= $new_day))
{
    echo "true";
   //last_result < today 7:00AM -> you award your price
} else {
    echo "false"; 
  //last_result > today 7:00AM -> you have already received the price for today
}

CodePudding user response:

using the DateTime builtin class makes life quite easy here

$power_date = '12/16/2022 02:40:40 PM';
$power_d = (new DateTime())->createFromFormat('m/d/Y H:i:s a', $power_date);

echo 'power_date =            ' . $power_d->format('d/m/Y H:i:s');
echo PHP_EOL;

$valid_end = new DateTime('today 07:00:00');
echo 'Valid End Date time =   ' . $valid_end->format('d/m/Y H:i:s');
echo PHP_EOL;

$valid_start = new DateTime('yesterday 07:00:00');
echo 'Valid Start Date time = ' . $valid_start->format('d/m/Y H:i:s');
echo PHP_EOL;

if ( $power_d > $valid_start && $power_d < $valid_end) {
    echo 'VALID';
} else {
    echo 'INVALID';
}

CodePudding user response:

The trick is to determine the correct cutoff time or correct date for the cutoff. This is much easier with the DateTime object.

$last_power = 'yesterday 7:00:01';
$current = new DateTime('today 6:59:59');  // demo, for production use: new DateTime('now') 
$new_day = new DateTime('today 7:00');  // can be past or future
$date_power = new DateTime($last_power); // you may need to use: (new DateTime())->createFromFormat()

if($current < $new_day){ // prior to 7am
    $new_day->modify('-1day'); // adjust the cutoff date
}
// now a simple comparison
if($date_power < $new_day){
    echo "true, price is older than " .$new_day->format('Y-m-d, H:i:s');
}else{
    echo "false, price is same age or newer than " .$new_day->format('Y-m-d, H:i:s');
}

The above will output the following (today being 2022-12-16):
false, price is newer than 2022-12-15, 07:00:00
Run it live here.

  • Related