我非常喜欢这个strtotime()功能,但是用户手册没有提供支持的日期格式的完整描述.strtotime('dd/mm/YYYY')不起作用,它只适用于mm/dd/YYYY格式.
如果我有dd/mm/YYYY格式化日期,我该如何将其转换为YYYY-mm-dd?我可以通过使用explode()函数来实现,但我认为有更好的解决方案.
小智 381
这是简化的解决方案:
$date = '25/05/2010';
$date = str_replace('/', '-', $date);
echo date('Y-m-d', strtotime($date));
Run Code Online (Sandbox Code Playgroud)
结果:
2010-05-25
Run Code Online (Sandbox Code Playgroud)
该strtotime文件内容如下:
通过查看各个组件之间的分隔符来消除m/d/y或dmy格式的日期:如果分隔符是斜杠(/),则假设为美国m/d/y ; 而如果分隔符是破折号(-)或点(.),则假定为欧洲dmy格式.
sal*_*the 60
您可以使用DateTime :: createFromFormat从自定义格式(从PHP 5.3开始)解析日期
$timestamp = DateTime::createFromFormat('!d/m/Y', '23/05/2010')->getTimestamp();
Run Code Online (Sandbox Code Playgroud)
(旁白:!用于将非指定值重置为Unix时间戳,即时间为午夜.)
如果您不想(或不能)使用PHP 5.3,那么strtotime接受的可用日期/时间格式的完整列表将在日期格式手册页上列出.该网页更彻底地描述了这样的事实m/d/Y推断过d/m/Y(但你可以,如答案这里提到,使用d-m-Y,d.m.Y或d\tm\tY).
在过去,我还使用了str_replace另一个答案中提到的quicky ,以及将日期字符串自解析为另一种格式,如
$subject = '23/05/2010';
$formatted = vsprintf('%3$04d/%2$02d/%1$02d', sscanf($subject,'%02d/%02d/%04d'));
$timestamp = strtotime($formatted);
Run Code Online (Sandbox Code Playgroud)
小智 16
来自STRTOTIME的文章说明:
通过查看各个组件之间的分隔符来消除m/d/y或dmy格式的日期:如果分隔符是斜杠(/),则假设为美国m/d/y; 而如果分隔符是破折号( - )或点(.),则假定为欧洲dmy格式.
它是如此简单.
Jon*_*Roy 15
这是解决许多问题的好方法:
function datetotime ($date, $format = 'YYYY-MM-DD') {
if ($format == 'YYYY-MM-DD') list($year, $month, $day) = explode('-', $date);
if ($format == 'YYYY/MM/DD') list($year, $month, $day) = explode('/', $date);
if ($format == 'YYYY.MM.DD') list($year, $month, $day) = explode('.', $date);
if ($format == 'DD-MM-YYYY') list($day, $month, $year) = explode('-', $date);
if ($format == 'DD/MM/YYYY') list($day, $month, $year) = explode('/', $date);
if ($format == 'DD.MM.YYYY') list($day, $month, $year) = explode('.', $date);
if ($format == 'MM-DD-YYYY') list($month, $day, $year) = explode('-', $date);
if ($format == 'MM/DD/YYYY') list($month, $day, $year) = explode('/', $date);
if ($format == 'MM.DD.YYYY') list($month, $day, $year) = explode('.', $date);
return mktime(0, 0, 0, $month, $day, $year);
}
Run Code Online (Sandbox Code Playgroud)
$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');
这对你有用。您可以将字符串转换为自定义日期格式,您可以在其中向 PHP 指定提供给它的字符串的原始格式。既然它是日期格式,您可以将其转换为 PHP 的默认日期格式,这与 MySQL 使用的相同。