将MMDDYYYY转换为PHP的日期

时间:2012-01-13 14:16:35

标签: php datetime date strtotime

我有一个日期为MMDDYYYY的字符串(即01132012,01142012等)

如果该字符串距离当前日期不超过14天,我需要在页面上执行某些操作。

即。今天是01132012,所以任何带有12312011或更少日期的字符串都会在页面上显示。

任何人都可以帮忙吗?我试过了

echo date("d/m/Y", strtotime('01142012'));

但无济于事。

6 个答案:

答案 0 :(得分:6)

您可以使用PHP的DateTime类

<?
  // current date
  $now = new DateTime();

  //your date
  $date = DateTime::createFromFormat('mdY', '01142012');

  // calculate difference 
  $diff = $now->diff($date);

  ...

  // output the date in format you want
  echo $date->format('d/m/Y');
?>
编辑:我刚才意识到,你的格式不是php支持的格式。所以你必须使用备用对象构建。

答案 1 :(得分:1)

我更喜欢使用strptime。

<?
$dt = strptime('01142012', '%m%d%Y');
echo sprintf("%02d/%02d/%04d", $dt['tm_mday'], $dt['tm_mon']+1, $dt['tm_year']+1900);

如果您使用PHP 5.3或更高版本,您还可以使用date_parse_from_format()

答案 2 :(得分:1)

某些substr + mktime怎么样?

$string = '01142012';
$time = mktime(0, 0, 0, 
          substr($string, 0, 2),
          substr($string, 2, 2),
          substr($string, 4, 4)
        );
 echo date('d/m/Y', $time);

答案 3 :(得分:0)

try date('m-d-y', strtotime('01142012'));

还可以尝试类似的东西;

$var = strtotime('01142012');
$var2 = date ('F j, Y', $var);

答案 4 :(得分:0)

你的字符串输入'01142012'不能被strtotime()解析,因为它不是有效的,因为它返回-1作为答案。要将其转换为有效日期,您需要添加斜线或短划线来分隔数字。

最简单的方法是从现在开始用数据库中的破折号或斜线存储日期,例如“01 -14-2012”或“01/14/2012”,否则您将不得不创建自己的函数将数字转换为strtotime()的有效形式。

要做到这一点,你可以这样做:

function makeValidDate($date) {

   $valid_date = array();
   $array = str_split($date); //split characters up

   foreach($array as $key => $character){
       if($key==2 || $key==4){
           $character = '-'.$character; //add relevant formatting to date
           $valid_date[] = $character; //add this to the formatted array
       }
       else{
           $valid_date[] = $character; // if not dashes or slashes needed add to valid array
       }
   }

   return implode($valid_date); // return the formmatted date for use with strtotime
}

然后,您可以执行此操作以获得有效日期:

$valid_date = makeValidDate('01142012');    
echo date("d/m/Y", strtotime($valid_date));

我没有对此进行测试,但您应该知道该怎么做。

编辑:Capi的想法更清晰!!

答案 5 :(得分:0)

尝试“preg_match(模式,将使用模式的字符串)”; http://www.php.net/manual/en/function.preg-match.php 你也可以定义一个偏移量。所以首先取te前2位数。而取其他2位数,然后取其他四位数。之后将它们放在一个字符串中。之后使用maketime,strtotime,date。这种愚蠢的解决方案,但我只想到了这一点。希望这会有所帮助