У меня есть строка с датой, которая находится в этом формате 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. это глупое решение, но я только думал об этом. надеюсь, это поможет