110

我正在尝试将日期从dd/mm/yyyy => yyyy-mm-dd. 我使用了 mktime() 函数和其他函数,但我似乎无法使其工作。我已经设法explode使用作为分隔符的原始日期'/',但我没有成功更改格式'/'并将'-'.

任何帮助将不胜感激。

4

5 回答 5

309

m/d/y或格式中的日期d-m-y通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 ( ),则假定/为美式;m/d/y而如果分隔符是破折号 ( -) 或点 ( ),则 假定.为欧洲格式。d-m-y在这里查看更多

使用默认日期函数。

$var = "20/04/2012";
echo date("Y-m-d", strtotime($var) );

编辑我刚刚对其进行了测试,不知何故,PHP 不适用于 dd/mm/yyyy 格式。这是另一个解决方案。

$var = '20/04/2012';
$date = str_replace('/', '-', $var);
echo date('Y-m-d', strtotime($date));
于 2012-04-24T22:38:01.493 回答
116

尝试使用DateTime::createFromFormat

$date = DateTime::createFromFormat('d/m/Y', "24/04/2012");
echo $date->format('Y-m-d');

输出

2012-04-24

编辑:

如果日期是 2010 年 5 月 4 日(D/M/YYYY 或 DD/MM/YYYY),则使用以下方法将 5/4/2010 转换为 2010-4-5(YYYY-MM-DD 或YYYY-MD) 格式。

$old_date = explode('/', '5/4/2010'); 
$new_data = $old_date[2].'-'.$old_date[1].'-'.$old_date[0];

输出:

2010-4-5
于 2012-04-24T22:46:46.440 回答
37

这是另一个不使用 date() 的解决方案。没那么聪明:)

$var = '20/04/2012';
echo implode("-", array_reverse(explode("/", $var)));
于 2012-04-24T22:53:06.143 回答
5

做这个:

date('Y-m-d', strtotime('dd/mm/yyyy'));

但请确保 'dd/mm/yyyy' 是实际日期。

于 2012-04-24T22:39:19.763 回答
1

我可以看到很好的答案,所以这里不需要重复,所以我想提供一些建议:

我建议使用 Unix Timestamp 整数而不是人类可读的日期格式在内部处理时间,然后使用 PHP 的date()函数将时间戳值转换为人类可读的日期格式以供用户显示。这是应该如何完成的粗略示例:

// Get unix timestamp in seconds
$current_time = date();

// Or if you need millisecond precision

// Get unix timestamp in milliseconds
$current_time = microtime(true);

然后$current_time在您的应用程序中根据需要使用(存储、加减等),然后当您需要向用户显示日期值时,您可以使用date()指定所需的日期格式:

// Display a human-readable date format
echo date('d-m-Y', $current_time);

这样您就可以避免在处理日期格式、转换和时区方面遇到很多麻烦,因为您的日期将采用紧凑、独立于时区(始终为 UTC)并在编程语言和数据库中得到广泛支持的标准化格式(Unix 时间戳) .

于 2012-04-24T23:03:36.133 回答