2013-06-28 36 views
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年6月28日为什么datetime返回今天的日期而不是输入日期?

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

+0

我贴我的回答只为你:http://stackoverflow.com/questions/17373007/how-to-check-for-a-failed-datetime-in-php/17373200# 17373200 – vikingmaster

回答

1

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

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

正如我相信改变输入是不是一种选择,并解析输入似乎有点牵强,使用第二种方法似乎是最合适的位置,并会导致更改此:

$date = new DateTime($date_input); 

这个:

$date = DateTime::createFromFormat('mdy', $date_input); 
3

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

+0

是createFromFormat允许指定输入格式,如果我吨不符合它失败? – Edward

+1

'createFromFormat'告诉'DateTime'类预期和解析哪种格式。你的格式“MMDDYY”应该是DateTime :: createFromFormat(“mdy”,$ date_input);''是在'date_convert'函数中创建'$ date'对象的最佳解决方案。 –

+1

此外,根据文档(http://www.php.net/manual/en/datetime.createfromformat.php),如果发生错误,'createFromFormat'确实会返回'FALSE',而不是有效的'DateTime'实例。 – CmdrMoozy

-1

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

+0

但是我的数据转换为MMDDYY格式。 – Edward

相关问题