Конвертировать MMDDYYYY в дату для PHP - PullRequest
3 голосов
/ 13 января 2012

У меня есть строка с датой в этом формате MMDDYYYY (т. Е. 01132012, 01142012 и т. Д.)

Мне нужно что-то сделать на странице, если эта строка составляет 14 дней или меньше оттекущая дата.

т.е.Сегодня 01132012, поэтому любые строки с 12312011 или меньшей датой будут что-то отображать на странице.

Может кто-нибудь помочь с этим?Я пробовал

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

Но безрезультатно.

Ответы [ 6 ]

6 голосов
/ 13 января 2012

Вы можете использовать класс DateTime PHP

<?
  // 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 голос
/ 13 января 2012

Как насчет какого-нибудь субстрата + 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);
1 голос
/ 13 января 2012

Я предпочитаю использовать 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 ()

0 голосов
/ 13 января 2012

try "preg_match (шаблон, строка, к которой будет применен шаблон)";http://www.php.net/manual/en/function.preg-match.php Вы также можете определить смещение.так что сначала возьмите первые 2 цифры.чем взять другие 2 цифры и после этого получить остальные четыре цифры.после этого поместите их в одну строку.после этого используйте maketime, strtotime, date.это глупое решение, но я думал только об этом.надеюсь, это поможет

0 голосов
/ 13 января 2012

Ваш ввод строки '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 намного чище !!

0 голосов
/ 13 января 2012
try date('m-d-y', strtotime('01142012'));

также может попробовать что-то вроде;

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