-2

我们如何格式化

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

但他们都失败了,php中有解决这个问题的函数吗?或者我们必须使用正则表达式之类的东西?

4

4 回答 4

2

如果您将文档阅读到strtotime(),您会看到它对日期是否为格式做出了dd mm yyyy假设mm dd yyyy

简而言之,假设会根据字符串是否包含连字符或斜杠作为分隔符而改变。不幸的是,编写这两种格式的人都使用连字符和斜杠,因此总会有一些示例被strtotime().

正因为如此,这两种格式都不是理想的,因为它们两者之间存在歧义。最好的选择是以不那么模糊的格式向程序提供日期。

您可以在调用之前对输入字符串进行字符串替换以将分隔符设置为预期格式strtotime()。不是一个很好的解决方案,但它确实有效。

如果您无法更改输入格式,并且您确定将收到哪种格式,则可以使用 [ DateTime::createFromFormat] 方法而不是strtotime(). 这会按原样解析日期字符串 strtotime(),但采用特定的格式字符串,因此您可以准确地告诉它您所期望的,从而消除歧义。

希望有帮助。

于 2012-06-03T19:29:00.310 回答
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}";
}
于 2012-06-03T19:32:14.097 回答
0

您所有的日期示例都是模棱两可的,可能是日期DMYMDY日期。您将需要自己解析日期,类似于

list($d, $m, $y) = explode('/', $date);
// compose your output from $d, $m and $y
于 2012-06-03T19:14:47.227 回答
0
$dateTime = strtotime('12/4/2012');
$output   = date('Ymd',$dateTime); 

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

于 2012-06-03T19:17:54.347 回答