2010-02-22 46 views
3

我正在寻找一个与DateTime::createFromFormat相同的函数,但我需要它在运行PHP版本低于v5.3的环境中工作。 基本上我需要提供一个格式,就像你使用Date()函数一样,然后我需要根据该格式解析/验证一个字符串,如果字符串格式正确并且有效的日期,则返回一个时间戳。PHP中的DateTime :: createFromFormat <5.3.0

任何人都知道我在哪里可以找到类似的东西,或者我必须自己写吗?

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

回答

6

DateTime::createFromFormatdate_parse_from_format已在PHP 5.3中添加,因为对该功能的需求很高,尤其是那些为不使用美国日期/时间格式的用户编码的开发人员。


在这之前,你必须开发一个特定的函数来解析你使用的格式;用PHP < 5.3,什么是一般做的是:

  • 决定哪种格式会被应用
  • 显示一些消息,说像接受“您输入的应该是JJ/MM/AAAA”(法国为DD/MM/YYYY)
  • 检查输入就OK了,就到该格式
  • 并解析它,将其转换为日期/时间PHP可以理解。

这意味着应用程序和开发人员通常不允许使用多种格式,因为每种格式意味着一种不同的额外验证+解析功能。


如果你真的很需要那一种功能,它允许任何可能的格式,我怕你会有种不得不自己编写:-(

的来源也许考虑看看的date_parse_from_format可以帮助,如果你了解C代码?它应该是在像ext/date/php_date.c类似的东西 - 但似乎并不那么简单:它调用timelib_parse_from_format函数,这是在ext/data/lib/parse_date.c定义,并不看起来那么友好^^

0

您可以创建一个timestamp,然后通过之日算起吧..创建timestamp你可以做你得到字符串一些explode ..

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

但我想最终的结果是时间戳。我需要从'createDateFromFormat(“j/t | n |'y”,“22/28 | 2 | '10”)这样的东西开始;'最后以2010年2月22日对应的时间戳记。 – 2010-02-22 16:49:59

+0

什么是28?结束日期 ? – Chris 2010-02-23 02:47:03

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); 
} 
1

适用于PHP版本之前的版本。3我使用下面的函数获取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的构造函数并将其返回。
相关问题