使用PHP发布的值日期转换为YYYYMMDD格式

时间:2010-07-14 13:41:31

标签: php date

我有一个使用JQuery(MMDDYYYY)从PHP发布的日期值,我想使用PHP将此日期格式转换为YYYYMMDD

$fromDate=str_replace("'","''",trim($_POST['p']));
echo "-->".$year = substr($fromDate, 6, 4)."<br>";
echo "-->".$month = substr($fromDate, 0, 2)."<br>";
echo "-->".$date = substr($fromDate, 3, 2)."<br>";
echo $new_date = date( 'Ymd', strtotime($month, $date, $year ));

假设在上面的代码中我输入的日期为070122010。最后一行的new_date给了我20100714。我不知道为什么要给今天的约会。我已经尝试了mktimestrtotime,但两者都给了我相同的结果。所需的结果为20100712YYYYMMDD)。

10 个答案:

答案 0 :(得分:5)

DateTime class DateTime::createFromFormat函数可以执行您想要的操作,只要您拥有PHP 5.3.0或更高版本:

$date = DateTime::createFromFormat('mdY', '12312010');

echo $date->format('Ymd');
// 20101231

echo $date->format('Y-m-d');
// 2010-12-31

echo $date->format('Y-M-d');
//2010-Dec-31

答案 1 :(得分:4)

strtotime($old_date)无法使用,因为MMDDYYYY不是有效的日期字符串:http://www.php.net/manual/en/datetime.formats.date.php

preg_replace("/([0-9]{2})([0-9]{2})([0-9]{4})/","$3$1$2",$old_date);

或更短的版本:

preg_replace("/([0-9]{4})([0-9]{4})/","$2$1",$old_date);

答案 2 :(得分:3)

strtotime无效,因为MMDDYYYY不是有效的日期字符串:

preg_replace("/([0-9]{2})([0-9]{2})([0-9]{4})/","$3$1$2", $orig_date);

答案 3 :(得分:3)

您不需要拆分日期。所有你需要做的就是把年份推到前面。

$orig = '01022010';
$new = substr($orig,4).substr($orig,0,4);

答案 4 :(得分:2)

以下是两种方式:

$d = preg_replace("/([0-9]{4})([0-9]{4})/", "$2$1", $originalDate);

$d = substr($originalDate, 4, 4) . substr($originalDate, 0, 4);

如果其中一个对你更有意义,我建议你使用那个。否则,我怀疑第二个会稍快一些,但我还没有测试过。

答案 5 :(得分:1)

function mmddyyyy_to_yyyymmdd ($input) {
    $monthdays = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
    if ( !preg_match('/\\A\\d{8}\\Z/', $input) ) {
        return false;
    }
    $month = (int)substr($input, 0, 2);
    $day   = (int)substr($input, 2, 2);
    $year  = (int)substr($input, 4);
    if ( $year % 4 == 0 and
         ( $year % 100 != 0 or $year % 400 == 0 )
         ) {
        $monthdays[1] = 29;
    }
    if ( $month < 1 or
         $month > 12 or
         $day < 1 or
         $day > $monthdays[$month-1]
         ) {
        return false;
    }
    if ( $month < 10 ) { $month = '0'.$month; }
    if ( $day < 10 ) { $day = '0'.$day; }
    while ( strlen($year) < 4 ) {
        $year = '0'.$year;
    }
    return $year.$month.$date;
}

答案 6 :(得分:0)

$new_date = date("Ymd", strtotime($old_date));

答案 7 :(得分:0)

$data = strptime('12242010','%m%d%Y');

$date = mktime(
 $data['tm_hour'],
 $data['tm_min'],
 $data['tm_sec'],
 $data['tm_mon']+1,
 $data['tm_mday'],
 $data['tm_year']+1900);

echo date('Ymd',$date);

答案 8 :(得分:0)

使用substr会更快:http://php.net/manual/de/function.substr.php

$orig="20072010"; // DDMMYYYY
$new=substr($orig,5,4)+substr($orig,3,2)+substr($orig,0,2); // YYYYMMDD

值得一读: http://www.php.net/manual/en/datetime.formats.date.php

答案 9 :(得分:-2)

这是我的答案。最后我成功了。

date( 'Ymd', mktime(0,0,0,$month, $date, $year ));