代码之家  ›  专栏  ›  技术社区  ›  Richard JP Le Guen

PHP中的DateTime::createFromFormat<5.3.0

  •  3
  • Richard JP Le Guen  · 技术社区  · 15 年前

    我正在寻找一个与相同的函数 DateTime::createFromFormat 但我需要它在运行比v5.3更旧的PHP版本的环境中工作。 基本上我需要提供一种格式,就像你们在 Date()

    有人知道我在哪里能找到这样的东西,还是我必须自己写?

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

    5 回复  |  直到 15 年前
        1
  •  6
  •   Pascal MARTIN    15 年前

    DateTime::createFromFormat date_parse_from_format 在PHP5.3中添加了,因为对该功能的需求很高,特别是为不使用US日期/时间格式的用户编写代码的开发人员。


    在此之前,您必须开发一个特定的函数来解析您所使用的格式;使用PHP<5.3,通常要做的是:

    • 决定应用程序将接受哪种格式
    • 显示一些消息,如 “您的输入应为JJ/MM/AAAA” (法语表示日/月/年)
    • 检查输入是否符合该格式
    • 并对其进行解析,将其转换为PHP可以理解的日期/时间。


    如果您真的需要这种函数,它允许任何可能的格式,恐怕您必须自己编写:-(

    从格式解析日期 如果你理解C代码,你能帮上忙吗?应该是这样的 ext/date/php_date.c --但似乎并不是那么简单:它是在召唤 timelib_parse_from_format ext/data/lib/parse_date.c ,看起来不那么友好^^

        2
  •  4
  •   Pumka    14 年前

    http://framework.zend.com/manual/en/zend.date.html

    $date = new Zend_Date($string, $format);
    $timestamp = $date->get();
    
        3
  •  3
  •   Nowaker    13 年前

    你可以用 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);
    }
    
        4
  •  1
  •   Damijan Cavar    12 年前

    对于5.3之前的PHP版本,我使用下面的函数 DateTime '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的构造函数并返回。
        5
  •  0
  •   Alfred redcoder    12 年前

    timestamp 然后把它运行到日期。。创建 explode 在你得到的绳子上。。

    $tomorrow = mktime(0,0,0,date("m"),date("d")+1,date("Y"));
    echo "Tomorrow is ".date("Y/m/d", $tomorrow);