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