Get the difference in seconds.
public getDifferenceInSeconds ( ExpressiveDate $compare = null ) : string | ||
$compare | ExpressiveDate | |
return | string |
function eme_client_clock_callback() { // Set php clock values in an array $phptime_obj = new ExpressiveDate(null,$eme_timezone); // if clock data not set if (!isset($_SESSION['eme_client_unixtime'])) { // Preset php clock values in client session variables for fall-back if valid client clock data isn't received. $_SESSION['eme_client_clock_valid'] = false; // Will be set true if all client clock data passes sanity tests $_SESSION['eme_client_php_difference'] = 0; // Client-php clock difference integer seconds $_SESSION['eme_client_unixtime'] = (int) $phptime_obj->format('U'); // Integer seconds since 1/1/1970 @ 12:00 AM $_SESSION['eme_client_seconds'] = (int) $phptime_obj->format('s'); // Integer second this minute (0-59) $_SESSION['eme_client_minutes'] = (int) $phptime_obj->format('i'); // Integer minute this hour (0-59) $_SESSION['eme_client_hours'] = (int) $phptime_obj->format('h'); // Integer hour this day (0-23) $_SESSION['eme_client_wday'] = (int) $phptime_obj->format('w'); // Integer day this week (0-6), 0 = Sunday, ... , 6 = Saturday $_SESSION['eme_client_mday'] = (int) $phptime_obj->format('j'); // Integer day this month 1-31) $_SESSION['eme_client_month'] = (int) $phptime_obj->format('n'); // Integer month this year (1-12) $_SESSION['eme_client_fullyear'] = (int) $phptime_obj->format('Y'); // Integer year (1970-9999) $ret = '1'; // reload from server } else { $ret = '0'; } // Cast client clock values as integers to avoid mathematical errors and set in temporary local variables. $client_unixtime = (int) $_POST['client_unixtime']; $client_seconds = (int) $_POST['client_seconds']; $client_minutes = (int) $_POST['client_minutes']; $client_hours = (int) $_POST['client_hours']; $client_wday = (int) $_POST['client_wday']; $client_mday = (int) $_POST['client_mday']; $client_month = (int) $_POST['client_month']; $client_fullyear = (int) $_POST['client_fullyear']; // Client clock sanity tests $valid = true; if (abs($client_unixtime - $_SESSION['eme_client_unixtime']) > 300) $valid = false; // allow +/-5 min difference if (abs($client_seconds - 30) > 30) $valid = false; // Seconds <0 or >60 if (abs($client_minutes - 30) > 30) $valid = false; // Minutes <0 or >60 if (abs($client_hours - 12) > 12) $valid = false; // Hours <0 or >24 if (abs($client_wday - 3) > 3) $valid = false; // Weekday <0 or >6 if (abs($client_mday - $_SESSION['eme_client_mday']) > 30) $valid = false; // >30 day difference if (abs($client_month - $_SESSION['eme_client_month']) > 11) $valid = false; // >11 month difference if (abs($client_fullyear - $_SESSION['eme_client_fullyear']) > 1) $valid = false; // >1 year difference // To insure mutual consistency, don't use any client values unless they all passed the tests. if ($valid) { $_SESSION['eme_client_unixtime'] = $client_unixtime; $_SESSION['eme_client_seconds'] = $client_seconds; $_SESSION['eme_client_minutes'] = $client_minutes; $_SESSION['eme_client_hours'] = $client_hours; $_SESSION['eme_client_wday'] = $client_wday; $_SESSION['eme_client_mday'] = $client_mday; $_SESSION['eme_client_month'] = $client_month; $_SESSION['eme_client_fullyear'] = $client_fullyear; $_SESSION['eme_client_clock_valid'] = true; // Set date & time clock strings $client_clock_str = "$client_fullyear-$client_month-$client_mday $client_hours:$client_minutes:$client_seconds"; $client_clock_obj = new ExpressiveDate($client_clock_str,$eme_timezone); $_SESSION['eme_client_php_difference'] = (int) $client_clock_obj->getDifferenceInSeconds($phptime_obj); } // it is an ajax instance: echo the result echo $ret; }
public function testGetDateDifferenceInSeconds() { $past = new ExpressiveDate('-1 day'); $future = new ExpressiveDate('+1 day'); $this->assertEquals(86400 * 2 * -1, $future->getDifferenceInSeconds($past)); $this->assertEquals(86400 * 2, $past->getDifferenceInSeconds($future)); }