0
<?php
// Convert MMDDYY to YYYY-MM-DD date format to be INSERTed
// into MySQL TABLE.
// If it can't convert the data because of an error, it returns 0000-00-00.
date_default_timezone_set('America/New_York');

function date_convert($date_input) {
    try {
    $date = new DateTime($date_input);
    $date_processed = $date->format('Y-m-d'); 
    } catch(Exception $e) {
    echo "Wrong date format $date_input" . "\n";
    $date_processed = "0000-00-00";
}
    return $date_processed;
}

// MMDDYY (January 1, 2000)
$TRANSACTION_DATE_MMDDYY_raw = "010100";
echo date_convert($TRANSACTION_DATE_MMDDYY_raw) . "\n";
?>

输出:2013-06-28

我预计它会返回 2000-01-01,但它会返回今天的日期。我错过了什么?我怎样才能解决这个问题?谢谢!

4

3 回答 3

3

您应该使用该createFromFormat方法。见:http ://us2.php.net/manual/en/datetime.createfromformat.php

于 2013-06-28T21:03:38.413 回答
1

PHP 无法知道您的日期格式是否像 MMDDYY。有两种方法可以解决这个问题:

  • 使用“有效格式”之一。您可以更改输入值,或使用一些字符串函数或正则表达式将其解析为有效格式。
  • 使用DateTime 类附带的静态createFromFormat方法。

由于我认为更改输入不是一种选择,并且解析输入似乎有点牵强,因此使用第二种方法似乎在这里最合适,并且会导致更改:

$date = new DateTime($date_input);  

进入这个:

$date = DateTime::createFromFormat('mdy', $date_input);
于 2013-06-28T21:21:04.503 回答
-1

您指定的格式无法转换/无法识别为正确格式。尝试'2000-01-01'

于 2013-06-28T21:05:10.927 回答