我有一个日期为MMDDYYYY的字符串(即01132012,01142012等)
如果该字符串距离当前日期不超过14天,我需要在页面上执行某些操作。
即。今天是01132012,所以任何带有12312011或更少日期的字符串都会在页面上显示。
任何人都可以帮忙吗?我试过了
echo date("d/m/Y", strtotime('01142012'));
但无济于事。
答案 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。这种愚蠢的解决方案,但我只想到了这一点。希望这会有所帮助