dd / mm / yyyy格式,但是d / m / yyyy格式到Ymd怎么样

时间:2012-06-03 19:10:59

标签: php time

我们如何格式化

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');

但它们都失败了,是否有一个解决这个问题的功能?或者我们必须使用像正则表达式这样的东西?

4 个答案:

答案 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)

您的所有日期示例都不明确,可以是DMYMDY个日期。您需要自己解析日期,类似于

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); 

http://php.net/manual/en/function.date.php