public function clean($value)␊ |
{␊ |
parent::clean($value);␊ |
$out = null;␊ |
if (in_array($value, $this->empty_values)) {␊ |
return '';␊ |
}␊ |
foreach ($this->input_formats as $format) {␊ |
if (false !== ($date = strptime($value, $format))) {␊ |
$day = str_pad($date['tm_mday'], 2, '0', STR_PAD_LEFT);␊ |
$month = str_pad($date['tm_mon']+1, 2, '0', STR_PAD_LEFT);␊ |
$year = str_pad($date['tm_year']+1900, 4, '0', STR_PAD_LEFT);␊ |
$h = str_pad($date['tm_hour'], 2, '0', STR_PAD_LEFT);␊ |
$m = str_pad($date['tm_min'], 2, '0', STR_PAD_LEFT);␊ |
$s = $date['tm_sec'];␊ |
if ($s > 59) $s=59;␊ |
$s = str_pad($s, 2, '0', STR_PAD_LEFT);␊ |
$out = $year.'-'.$month.'-'.$day.' '.$h.':'.$m.':'.$s;␊ |
break;␊ |
$day = $date['tm_mday'];␊ |
$month = $date['tm_mon'] + 1;␊ |
$year = $date['tm_year'] + 1900;␊ |
// PHP's strptime has various quirks, e.g. it doesn't check␊ |
// gregorian dates for validity and it also allows '60' in␊ |
// the seconds part␊ |
if (checkdate($month, $day, $year) && $date['tm_sec'] < 60) {␊ |
$date = str_pad($year, 4, '0', STR_PAD_LEFT).'-'.␊ |
str_pad($month, 2, '0', STR_PAD_LEFT).'-'.␊ |
str_pad($day, 2, '0', STR_PAD_LEFT).' '.␊ |
str_pad($date['tm_hour'], 2, '0', STR_PAD_LEFT).':'.␊ |
str_pad($date['tm_min'], 2, '0', STR_PAD_LEFT).':';␊ |
str_pad($date['tm_sec'], 2, '0', STD_PAD_LEFT);␊ |
␊ |
// we internally use GMT, so we convert it to a GMT date.␊ |
return gmdate('Y-m-d H:i:s', strtotime($date));␊ |
}␊ |
}␊ |
}␊ |
if ($out !== null) {␊ |
// We internally use GMT, so we convert it to a GMT date.␊ |
return gmdate('Y-m-d H:i:s', strtotime($out));␊ |
}␊ |
throw new Pluf_Form_Invalid(__('Enter a valid date/time.'));␊ |
}␊ |
}␊ |