PHP 转换日期格式 dd/mm/yyyy => yyyy-mm-dd


PHP convert date format dd/mm/yyyy => yyyy-mm-dd

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

任何帮助将不胜感激。

m/d/yd-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));

尝试使用 DateTime::createFromFormat

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

输出

2012-04-24

编辑:

如果日期为 5/4/2010(D/M/YYYY 或 DD/MM/YYYY

),则以下方法用于将 5/4/2010 转换为 2010-4-5(YYYY-MM-DD 或 YYYY-M-D)格式。

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

输出:

2010-4-5

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

$var = '20/04/2012';
echo implode("-", array_reverse(explode("/", $var)));

这样做:

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

但请确保"日/月/年"是实际日期。

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

我建议使用 Unix 时间戳整数而不是人类可读的日期格式

在内部处理时间,然后使用 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);
这样,您将避免处理日期格式,转换和时区的

麻烦,因为您的日期将采用标准化格式(Unix时间戳),该格式紧凑,与时区无关(始终采用UTC),并在编程语言和数据库中得到广泛支持。