Я обнаружил, что вызов date_get_last_errors
после date_create_from_format
уже дает вам все виды проверок в проанализированной строке, в массивах warnings
и errors
и счетчиках warning_count
и error_count
.
Так что достаточно просто проверить счетчики на наличие нулевых предупреждений и ошибок.
Пересмотрен код с некоторыми тестами:
<?
$appTZ = 'America/Sao_Paulo';
function datetimeCreateErrorsWarnings() {
$obj = date_get_last_errors();
return ($obj['error_count'] > 0) || ($obj['warning_count'] > 0);
}
function datetimeToUnixTS($data) {
global $appTZ;
$fmt = "d/m/Y H:i:s";
$dtobj = date_create_from_format($fmt, $data . " 00:00:00", timezone_open($appTZ));
if ($dtobj) {
if (!datetimeCreateErrorsWarnings()) {
return date_timestamp_get($dtobj);
}
}
//Second try, $data is auto-suficient
$dtobj = date_create_from_format($fmt, $data, timezone_open($appTZ));
if ($dtobj) {
if (!datetimeCreateErrorsWarnings()) {
return date_timestamp_get($dtobj);
}
}
return -1;
}
$test = array(
'asdfasdf',
'',
"28/02/2011",
"29/02/2011",
"28/02/2011 00:00:90"
);
for ($i=0; $i<count($test); $i++) {
$tmp = datetimeToUnixTS($test[$i]);
var_dump($tmp);
echo "<p>";
}
?>
Приведенный выше скрипт вычисляет метку времени Unix для созданной даты и времени.