|
function parseDateByFormat($date, $format) { $timestamp = null; $formatPatterns = array( 'a' => '(?P<a>am|pm)', 'A' => '(?P<A>AM|PM)', 'B' => '(?P<B>[0-9]{3})', // 'c' => '(?P<c>)', 'd' => '(?P<d>[1-9]|[12][0-9]|3[01])', 'D' => '(?P<D>Mon|Tue|Wed|Thu|Fri|Sat|Sun)', 'F' => '(?P<F>January|February|March|April|May|June|July|August|September|October|November|December)', 'g' => '(?P<g>[1-9]|1[0-2])', 'G' => '(?P<G>[0-9]|1[0-9]|2[0-3])', 'h' => '(?P<h>0[1-9]|1[0-2])', 'H' => '(?P<H>[01][0-9]|2[0-3])', 'i' => '(?P<i>[0-4][0-9]|5[0-9])', 'I' => '(?P<I>[01])', 'j' => '(?P<j>[1-9]|[12][0-9]|3[01])', 'l' => '(?P<l>Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)', 'L' => '(?P<L>[01])', 'm' => '(?P<m>0[1-9]|1[0-2])', 'M' => '(?P<M>Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)', 'n' => '(?P<n>[1-9]|1[0-2])', 'O' => '(?P<O>[+\-][0-9]{4})', // 'r' => '(?P<r>)', 's' => '(?P<s>[0-4][0-9]|5[0-9])', 'S' => '(?P<S>st|nd|rd|th)', 't' => '(?P<t>28|29|30|31)', 'T' => '(?P<T>[A-Z]{3})', 'U' => '(?P<U>[1-9][0-9]*)', 'w' => '(?P<w>[0-6])', 'W' => '(?P<W>[1-9]|[1-4][0-9]|5[0-3])', 'Y' => '(?P<Y>[0-9]{4})', 'y' => '(?P<y>[0-9]{2})', 'z' => '(?P<z>[0-9]|[12][0-9][0-9]|3(?:[0-5][0-9]|6[0-5]))', 'Z' => '(?P<Z>-?(?:[0-9]|[1-9][0-9]{3}|[1-3][0-9]{4}|4(?:[0-2][0-9]{3}|3[01][0-9]{2}|3200)))', ); $regexp = preg_replace('/[a-zA-Z]/e', 'isset($formatPatterns["$0"])?$formatPatterns["$0"]:"$0"', $format); if (preg_match('/^'.$regexp.'$/', trim($date), $match)) { $values = array(0, 0, 0, 0, 0, 0, 0); foreach ($match as $format => $value) { if ($format == 'g' || $format == 'G' || $format == 'h' || $format == 'H') { $values[0] = $value; } else if ($format == 'i') { $values[1] = $value; } else if ($format == 's') { $values[2] = $value; } else if ($format == 'm' || $format == 'n') { $values[3] = $value; } else if ($format == 'd' || $format == 'j') { $values[4] = $value; } else if ($format == 'Y' || $format == 'y') { $values[5] = $value; } } $timestamp = mktime($values[0], $values[1], $values[2], $values[3], $values[4], $values[5]); } return $timestamp; } var_dump(parseDateByFormat('2008-06-14 17:43:02', 'Y-m-d H:i:s'));
|