将MMDDYYYY转换为PHP日期

3

我有一个字符串,它的日期格式是MMDDYYYY(例如:01132012、01142012等)

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

例如,今天是01132012,所以任何日期为12312011或更早的字符串都将在页面上显示某些内容。

有人能帮忙吗?我已经尝试过

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

但是毫无效果。

4
熟悉 PHP 手册中的 strptime 函数:strptime - outis
6个回答

7
你可以使用 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支持。所以你需要使用备用的对象构建。


得到了一个空白页面。$date = new DateTime('01142012');echo $date->format('m/d/Y'); - jsquadrilla
@BloodyWorld 最好使用 DateTime::createFromFormat - http://www.php.net/manual/en/datetime.createfromformat.php - Timur

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() 函数。

“echo sprintf()”是一种“反模式”。没有任何理由让任何人在任何代码中编写“echo sprintf()”,因为每次都应该使用“printf()”。 - mickmackusa

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

0
尝试使用"preg_match(pattern,string on wich the pattern will be aplied)"来匹配字符串; http://www.php.net/manual/en/function.preg-match.php 你还可以定义一个偏移量。首先取前2个数字,然后取另外2个数字,然后取剩下的四个数字。之后将它们放在一个字符串中。然后使用maketime、strtotime和date函数。这种方法可能有些愚蠢,但我只能想到这个。希望能对你有所帮助。

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

你也可以尝试类似这样的代码:

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

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的想法更加简洁!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接