【发布时间】:2017-12-13 08:39:07
【问题描述】:
我在从数据库中检索日期并以意大利语格式回显到屏幕时创建了此函数:
function get_data_ita($date) {
if ($date == "")
return "";
$d = new DateTime($date);
return $d->format('d/m/Y');
}
其中$date 是mysql 格式,例如:2017-12-31 14:00:00
现在,如果我传递了正确的格式,例如:2017-12-31 14:00:00,该函数就可以工作。
但有时我需要使用 SAME 函数,传递一个已经格式化的日期,例如:30/12/2017。在这种情况下,我当然会遇到解析错误。
如何检查传递的日期是否已经是意大利语格式,如果是则返回未触及的日期,如果不是,则解析日期? 我需要这样的功能:
function get_data_ita($date) {
if ( $date== ALREADY_IN_ITALIAN_FORMAT )
return $date;
if ($date == "")
return "";
$d = new DateTime($date);
return $d->format('d/m/Y');
}
echo get_data_ita("30/12/2017");
echo get_data_ita("2017-12-31 14:00:00");
回声:
30/12/2017
31/12/2017
更新:我自己找到了解决方案:
function validateDate($date, $format = 'Y-m-d')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
function get_data_ita($datetime_db) {
if ( validateDate($datetime_db, 'd/m/Y') ) {
return $datetime_db;
}
if ($datetime_db == "")
return "";
$date = new DateTime($datetime_db);
return $date->format('d/m/Y');
}
【问题讨论】:
-
我不知道如何检查日期是否已被解析
-
为什么不使用 PHP
date()函数来实现呢? -
嗯,一个区别是在你的意大利日期中使用
/,当数据库给你一个-分隔符时......你可以判断没有魔法,因为它们只是就 PHP 而言的字符串 -
使用正则表达式或 DateTime::createFromFormat 函数测试数据格式