Преобразовать MMDDYYYY на PHP

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

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

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

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

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

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

Вы можете использовать класс 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'); ?> 

EDIT: Я только понял, что ваш формат не поддерживается php. Таким образом, вы должны использовать альтернативный объект.

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

Как насчет некоторого 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); 
 try date('md-y', strtotime('01142012')); 

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

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

Строковый ввод '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)); 

Я не тестировал это, но вы должны получить хорошее представление о том, что делать.

EDIT: идея Capi намного чище!

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