3

我正在寻找一个与DateTime::createFromFormat相同的函数,但我需要它在运行早于 v5.3 的 PHP 版本的环境中工作。基本上,我需要提供一种格式,就像您在Date()函数中使用的那样,然后我需要针对该格式解析/验证一个字符串,并在字符串格式正确和有效日期的情况下返回一个时间戳。

有人知道我在哪里可以找到类似的东西,还是我必须自己写?

同样,这必须使用作为参数提供的特定格式。格式可以是任何东西,所以不能保证我可以只使用strtotime()

4

5 回答 5

6

DateTime::createFromFormatdate_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并且看起来不那么友好 ^^

于 2010-02-22T18:26:24.133 回答
4

您可以使用 Zend 框架中的 Zend_Date 类:http: //framework.zend.com/manual/en/zend.date.html

$date = new Zend_Date($string, $format);
$timestamp = $date->get();
于 2010-09-12T01:12:33.297 回答
3

您可以使用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);
}
于 2012-01-10T13:32:19.723 回答
1

对于 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 的构造函数并返回它。
于 2012-08-10T14:55:59.183 回答
0

您可以创建一个timestamp然后通过日期运行它..创建您可以对您获得的字符串timestamp执行一些操作..explode

$tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
echo "Tomorrow is ".date("Y/m/d", $tomorrow);
于 2010-02-22T16:40:40.823 回答