note 102705 added to function.strtotime

From: Date: Tue, 01 Mar 2011 16:17:05 +0000
Subject: note 102705 added to function.strtotime
Groups: php.notes 
Request: Send a blank email to php-notes+get-177451@lists.php.net to get a copy of this message
PHP strtotime() does not handle the ISO8601 notation for "duration." This handles the most likely subset of the duration standard (the one that is used by eBay). <?php // RAY_duration_strtotime.php error_reporting(E_ALL); date_default_timezone_set('America/New_York'); // WHAT DOES THIS STRING MEAN? $str = 'P1Y3M2DT16H2M40S'; // IT IS THE ISO8601 FORMAT FOR A DURATION. // SEE http://en.wikipedia.org/wiki/ISO_8601 // IT MEANS THIS: // P = Pending (INDICATOR OF ISO8601 DURATION) // 1Y = 1 Year // 3M = 3 Months // 2D = Two Days // T = Time Separator (M is ambiguous) // 16H = Sixteen hours // 2M = Two minutes // 40S = Forty seconds // STRTOTIME CANNOT HANDLE ISO-8601 DURATIONS $dur = strtotime($str); var_dump($dur); echo "<br/>"; // GET THE DURATION IN SECONDS FOR USE IN ARITHMETIC $dur = duration_strtotime($str); echo "<br/>" . number_format($dur) . ' SECONDS'; // USE THE DURATION IN ARITHMETIC echo "<br/>" . date('r', strtotime("NOW + $dur SECONDS")); // A FUNCTION TO MAKE A DURATION STRING INTO A NUMBER OF SECONDS function duration_strtotime($str, $sho=FALSE) { // REMOVE THE AMBIGUITY OF MONTH AND MINUTE -- MAKE MONTH = X $arr = explode('T', $str); $arr[0] = str_replace('M', 'X', $arr[0]); $new = implode('T', $arr); // EXPAND THE STRING INTO SOMETHING SENSIBLE $new = str_replace('S', 'seconds ', $new); $new = str_replace('M', 'minutes ', $new); $new = str_replace('H', 'hours ', $new); $new = str_replace('T', ' ', $new); $new = str_replace('D', 'days', $new); $new = str_replace('X', 'months ', $new); $new = str_replace('Y', 'years ', $new); $new = str_replace('P', NULL, $new); if ($sho) var_dump($new); // RETURN THE NUMBER OF SECONDS IN THE DURATION return strtotime($new) - strtotime('NOW'); } ---- Server IP: 69.147.83.197 Probable Submitter: 98.169.58.122 ---- Manual Page -- http://www.php.net/manual/en/function.strtotime.php Edit -- https://master.php.net/note/edit/102705 Del: integrated -- https://master.php.net/note/delete/102705/integrated Del: useless -- https://master.php.net/note/delete/102705/useless Del: bad code -- https://master.php.net/note/delete/102705/bad+code Del: spam -- https://master.php.net/note/delete/102705/spam Del: non-english -- https://master.php.net/note/delete/102705/non-english Del: in docs -- https://master.php.net/note/delete/102705/in+docs Del: other reasons-- https://master.php.net/note/delete/102705 Reject -- https://master.php.net/note/reject/102705 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#177451) next »