Fix handling of non-default date formats (#1489294)
- remove ambiguous m/d/Y format from default config
| | |
| | | CHANGELOG Roundcube Webmail |
| | | =========================== |
| | | |
| | | - Fix handling of non-default date formats (#1489294) |
| | | - Fix unquoted path in PREG expression on Windows (#1489290) |
| | | - Fix replacement variables in user-specific base_dn in some LDAP requests (#1489279) |
| | | - Fix image scaling issues when image has only one dimension smaller than the limit (#1489274) |
| | |
| | | $config['date_format'] = 'Y-m-d'; |
| | | |
| | | // give this choice of date formats to the user to select from |
| | | $config['date_formats'] = array('Y-m-d', 'd-m-Y', 'Y/m/d', 'm/d/Y', 'd/m/Y', 'd.m.Y', 'j.n.Y'); |
| | | // Note: do not use ambiguous formats like m/d/Y |
| | | $config['date_formats'] = array('Y-m-d', 'Y/m/d', 'Y.m.d', 'd-m-Y', 'd/m/Y', 'd.m.Y', 'j.n.Y'); |
| | | |
| | | // use this format for time display (date or strftime format) |
| | | $config['time_format'] = 'H:i'; |
| | |
| | | */ |
| | | public static function strtotime($date) |
| | | { |
| | | $date = trim($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])); |
| | | if (preg_match('/^([12][90]\d\d)([01]\d)([0123]\d)$/', $date, $m)) { |
| | | return mktime(0,0,0, intval($m[2]), intval($m[3]), intval($m[1])); |
| | | } |
| | | else if (is_numeric($date)) { |
| | | |
| | | // common little-endian formats, e.g. dd/mm/yyyy (not all are supported by strtotime) |
| | | if (preg_match('/^(\d{1,2})[.\/-](\d{1,2})[.\/-](\d{4})$/', $date, $m) |
| | | && $m[1] > 0 && $m[1] <= 31 && $m[2] > 0 && $m[2] <= 12 && $m[3] >= 1970 |
| | | ) { |
| | | return mktime(0,0,0, intval($m[2]), intval($m[1]), intval($m[3])); |
| | | } |
| | | |
| | | // unix timestamp |
| | | if (is_numeric($date)) { |
| | | return (int) $date; |
| | | } |
| | | |
| | |
| | | $test = array( |
| | | '1' => 1, |
| | | '' => 0, |
| | | '2013-04-22' => 1366581600, |
| | | '2013/04/22' => 1366581600, |
| | | '2013.04.22' => 1366581600, |
| | | '22-04-2013' => 1366581600, |
| | | '22/04/2013' => 1366581600, |
| | | '22.04.2013' => 1366581600, |
| | | '22.4.2013' => 1366581600, |
| | | '20130422' => 1366581600, |
| | | ); |
| | | |
| | | foreach ($test as $datetime => $ts) { |
| | | $result = rcube_utils::strtotime($datetime); |
| | | $this->assertSame($ts, $result); |
| | | $this->assertSame($ts, $result, "Error parsing date: $datetime"); |
| | | } |
| | | } |
| | | |