PHP < 5.3.0 中的 DateTime::createFromFormat
-
22-09-2019 - |
题
我正在寻找与以下相同的功能 日期时间::createFromFormat 但我需要它在运行早于 v5.3 的 PHP 版本的环境中工作。基本上我需要提供一种格式,就像您使用的 日期() 函数,然后我需要根据该格式解析/验证字符串,如果字符串格式正确,则返回时间戳和有效日期。
有人知道我在哪里可以找到类似的东西,还是我必须自己写?
同样,这必须使用作为参数提供的特定格式。格式可以是任何格式,所以不能保证我可以使用 strtotime().
解决方案
DateTime::createFromFormat
和 date_parse_from_format
已在 PHP 5.3 中添加,因为对该功能的需求很高,尤其是为不使用美国日期/时间格式的用户编写代码的开发人员。
在此之前,您必须开发一个特定的函数来解析您正在使用的格式;对于 PHP < 5.3,通常做的是:
- 决定应用程序接受哪种格式
- 显示一些消息,内容如下 “您的输入应该是 JJ/MM/AAAA” (法语表示 DD/MM/YYYY)
- 检查输入是否正确,就该格式而言
- 并解析它以将其转换为 PHP 可以理解的日期/时间。
这意味着应用程序和开发人员通常不允许使用那么多格式,因为每种格式都意味着一个不同的附加验证+解析功能。
如果您确实需要这种允许任何可能格式的函数,恐怕您必须自己编写它:-(
也许看看来源 date_parse_from_format
如果您了解 C 代码,可以提供帮助吗?它应该是这样的 ext/date/php_date.c
——但似乎没那么简单:它正在调用 timelib_parse_from_format
函数,其定义在 ext/data/lib/parse_date.c
, ,看起来不太友好^^
其他提示
可以使用Zend_Date类从Zend框架: HTTP://框架。 zend.com/manual/en/zend.date.html
$date = new Zend_Date($string, $format);
$timestamp = $date->get();
您可以使用 strptime()
- 它正在使用 strftime()
格式。与相比有点不同 date()
格式但做几乎相同的事情。
function createFromFormat($strptimeFormat, $date) {
$date = strptime($date, $strptimeFormat);
$date['tm_year'] += 1900;
$date['tm_mon']++;
$timestamp = mktime($date['tm_hour'], $date['tm_min'], $date['tm_sec'], $date['tm_mon'], $date['tm_mday'], $date['tm_year']);
return new DateTime('@'. $timestamp);
}
对于 5.3 之前的 PHP 版本,我使用下面的函数来获取 约会时间 对象形式字符串格式为 'DD.MM.YYYY'
.
function ParseForDateTimeValue ($strText)
{
if ($strText != "")
{
if (ereg("^([0-9]{1,2})[/\.]\s*([0-9]{1,2})[/\.]\s*([0-9]{2,4})$",$strText,$arr_parts)) {
$month = ltrim($arr_parts[2], '0');
$day = ltrim($arr_parts[1], '0');
$year = $arr_parts[3];
if (checkdate($month, $day, $year)) {
return new DateTime(date('Y-m-d H:i:s', mktime(0, 0, 0, $month, $day, $year));
}
}
}
return NULL;
}
- 首先验证输入是否正确。
- 然后提取月、日、年
- 使用 checkdate 验证日期。
- 将其转换为时间戳并将其传递给 DateTime 的构造函数并返回它。
您可以创建一个timestamp
,然后通过之日算起吧..创建你可以做你得到字符串一些timestamp
的explode
..
$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);