Nader Khan
Nader Khan

Reputation: 188

php check if specified time has expired

I am trying to compare the current datetime, with a datetime from the database using string, as the following:

$today = new DateTime("now");
$todayString = $today->format('Y-m-d H:i:s'); 

if($todayString >= $rows["PrioritizationDueDate"])
{...}

$todayString keeps giving me the time 7 hours earlier (i.e now its 11:03pm, its giving me 16:04).

More, is it better to compare this way, or should i compare using datetime objects?

Upvotes: 1

Views: 1180

Answers (3)

nickb
nickb

Reputation: 59699

Set a correct timezone in the constructor to DateTime.

$today = new DateTime("now", new DateTimeZone('TimezoneString'));

Where TimezoneString is a valid timezone string.

Edit: For a more complete example using DateTime objects, I would use DateTime::diff in conjunction with DateTime::createFromFormat.

$rows["PrioritizationDueDate"] = '2011-11-20 10:30:00';

$today = new DateTime("now", new DateTimeZone('America/New_York'));
$row_date = DateTime::createFromFormat( 'Y-m-d H:i:s', $rows["PrioritizationDueDate"], new DateTimeZone('America/New_York'));

if( $row_date->diff( $today)->format('%a') > 1)
{
    echo 'The row timestamp is more than one day in the past from now.';
}

Demo

Upvotes: 0

Adhaata
Adhaata

Reputation: 82

First set time zone using this function

 date_default_timezone_set('UTC');

Then either you can use function strtotime() or get difference directly...

Upvotes: 0

Your Common Sense
Your Common Sense

Reputation: 157839

$todayString keeps giving me the time 7 hours earlier

you have to setup a timezone for the DateTime object I believe.

is it better to compare this way

I doubt so.
The general way is to compare in the query, using SQL to do all date calculations and return only matching rows.

Upvotes: 1

Related Questions