Немного подумал...
$date = \'16.05.2000 16:37\';
$format0 = \'d.m.Y G:i\';
// формат по установленному формату +
function reformat_static($date) {
list($day, $month, $year) = sscanf($date, \'%d.%d.%dг.\');
return strtotime("$month/$day/$year");
}
//echo $time = reformat_static($date);
// более сложный вариант
// если в шаблоне $format0 использовать только буквы из $matrix, то всё ок
function reformat_date($date, $format0) {
$matrix = array(
\'d\' => \'%d\',
\'m\' => \'%d\',
\'Y\' => \'%d\',
\'G\' => \'%d\',
\'i\' => \'%d\'
);
// сначала мы сохраняем все символы шаблона в порядке их появления
$var_order = array();
for ($i = 0; $i < strlen($format0); $i++) {
$symb = $format0[$i];
if (array_key_exists($symb, $matrix)) {
$var_order[] = $symb;
}
}
// создаём регулярное выражение
$regexp = $format0;
foreach ($matrix as $symb => $reg) {
$regexp = str_replace($symb, $reg, $regexp);
}
// сканируем дату по порядку 0, 1, 2...
$array = sscanf($date, $regexp);
// теперь присваиваем переменным из $var_order значения из $array
foreach ($var_order as $k => $var) {
$$var = $array[$k]; // теперь в глобальной области определены переменные $d, $Y ...
}
// чтобы определить дату, нам нужны именно такие переменные. Но их может не быть. Это надо отдельно проверять.
// например, empty($i) ? $i = \'\' : $i = ":$i" ; с изменением кода ниже конечно
// это я делать уже не стал, сами поработайте
return strtotime("$m/$d/$Y $G:$i"); // проблема в том, найдены ли данные переменные
}
echo $time = reformat_date($date, $format0);
echo \'
\' . date($format0, $time)