我们如何格式化
12/4/2012 to 20120412
和
4/11/2012 to 20121104
或
5/4/2012 to 20120405
使用php?
我使用strtotime()
和
$date = new DateTime('4/11/2012');
$date = $date->format('Ymd');
但它们都失败了,是否有一个解决这个问题的功能?或者我们必须使用像正则表达式这样的东西?
答案 0 :(得分:2)
如果您阅读strtotime()
的文档,则会看到它会假设日期是dd mm yyyy
还是mm dd yyyy
格式。
简而言之,假设根据字符串是否包含连字符或斜杠作为分隔符而改变。不幸的是,编写两种格式的人都使用连字符和斜杠,因此总会有strtotime()
错误解释的例子。
因此,两种格式都不理想,因为它们之间存在模糊性。最好的选择是以较不模糊的格式为程序提供日期。
您可以在输入字符串上执行字符串替换,以便在调用strtotime()
之前将分隔符设置为预期的格式。不是一个很好的解决方案,但确实有效。
如果您无法更改输入格式,并且您确定要接收哪种格式,则可以使用[DateTime::createFromFormat
]方法代替strtotime()
。这会将日期字符串解析为strtotime()
,但会采用特定的格式字符串,因此您可以准确地告诉它您期望的内容,从而消除歧义。
希望有所帮助。
答案 1 :(得分:1)
这应该有效:
function x($string) {
$array = explode('/', $string);
$a = $array[0];
$b = $array[1];
$c = $array[2];
if (( (int)$a - 10) < 0) { $a = "0$a"; }
if (( (int)$b - 10) < 0) { $b = "0$a"; }
return "{$c}{$b}{$a}";
}
答案 2 :(得分:0)
您的所有日期示例都不明确,可以是DMY
或MDY
个日期。您需要自己解析日期,类似于
list($d, $m, $y) = explode('/', $date);
// compose your output from $d, $m and $y
答案 3 :(得分:0)
$dateTime = strtotime('12/4/2012');
$output = date('Ymd',$dateTime);