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

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

任何帮助都将不胜感激。

480811 次浏览

通过查找可以消除 m/d/yd-m-y格式中的日期的歧义 at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the 分隔符是一个破折号(-)或一个点(.) ,然后是欧洲的 d-m-y 格式。请检查 这里更多

使用默认的日期函数。

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

EDIT I just tested it, and somehow, PHP doesn't work well with dd/mm/yyyy format. Here's another solution.

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

这样做:

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

但要确保“ dd/mm/yyyy”是真正的日期。

尝试使用 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-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)));

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

我建议使用 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);

This way you'll avoid much headache dealing with date formats, conversions and timezones, as your dates will be in a standardized format (Unix Timestamp) that is compact, timezone-independent (always in UTC) and widely supported in programming languages and databases.