From 31278471d3f2b882e28e01184814f3edc69973bf Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Fri, 21 Jan 2011 11:50:07 -0500 Subject: [PATCH] Use improved strtotime() function + reduce duplicated code --- program/include/main.inc | 49 ++++++++++++++++-------- program/include/rcube_imap_generic.php | 16 ------- 2 files changed, 34 insertions(+), 31 deletions(-) diff --git a/program/include/main.inc b/program/include/main.inc index 0815c25..8e8de03 100644 --- a/program/include/main.inc +++ b/program/include/main.inc @@ -978,6 +978,37 @@ /** + * Improved equivalent to strtotime() + * + * @param string Date string + * @return int + */ +function rcube_strtotime($date) +{ + // check for MS Outlook vCard date format YYYYMMDD + if (preg_match('/^([12][90]\d\d)([01]\d)(\d\d)$/', trim($date), $matches)) { + return mktime(0,0,0, intval($matches[2]), intval($matches[3]), intval($matches[1])); + } + else if (is_numeric($date)) + return $date; + + // support non-standard "GMTXXXX" literal + $date = preg_replace('/GMT\s*([+-][0-9]+)/', '\\1', $date); + + // if date parsing fails, we have a date in non-rfc format. + // remove token from the end and try again + while ((($ts = @strtotime($date)) === false) || ($ts < 0)) { + $d = explode(' ', $date); + array_pop($d); + if (!$d) break; + $date = implode(' ', $d); + } + + return $ts; +} + + +/** * Convert the given date to a human readable form * This uses the date formatting properties from config * @@ -991,22 +1022,8 @@ $ts = NULL; - if (is_numeric($date)) - $ts = $date; - else if (!empty($date)) - { - // support non-standard "GMTXXXX" literal - $date = preg_replace('/GMT\s*([+-][0-9]+)/', '\\1', $date); - // if date parsing fails, we have a date in non-rfc format. - // remove token from the end and try again - while ((($ts = @strtotime($date))===false) || ($ts < 0)) - { - $d = explode(' ', $date); - array_pop($d); - if (!$d) break; - $date = implode(' ', $d); - } - } + if (!empty($date)) + $ts = rcube_strtotime($date); if (empty($ts)) return ''; diff --git a/program/include/rcube_imap_generic.php b/program/include/rcube_imap_generic.php index 6bebd8c..b4f01a9 100644 --- a/program/include/rcube_imap_generic.php +++ b/program/include/rcube_imap_generic.php @@ -3223,21 +3223,7 @@ */ private function strToTime($date) { - // support non-standard "GMTXXXX" literal - $date = preg_replace('/GMT\s*([+-][0-9]+)/', '\\1', $date); - // if date parsing fails, we have a date in non-rfc format. - // remove token from the end and try again - while ((($ts = @strtotime($date))===false) || ($ts < 0)) { - $d = explode(' ', $date); - array_pop($d); - if (!$d) { - break; - } - $date = implode(' ', $d); - } - - $ts = (int) $ts; - + $ts = (int) rcube_strtotime($date); return $ts < 0 ? 0 : $ts; } -- Gitblit v1.9.1