[英]Date in a URL dd/mm/yyyy
我正在URL中以以下格式传递日期(dd / mm / yyyy):
http://www.website.com/_parameter=20/02/2000
我正在使用以下PHP将其转换为YYYY-MM-DD格式。
<?php
$D->query = '';
if ($this->param('_parameter')) $D->query = date('Y-m-d', strtotime($this->param('_parameter')));
?>
而我的数据库如下:
SELECT idtask FROM task WHERE unfinish=1 AND date LIKE '%".$D->query."%' "
上面返回以下内容:
1970-01-01
使用strotime()
,需要确保使用有效的datetime格式 。 否则, strtotime()
将返回false
或为您提供意外的值。
假定使用XX / XX / XXXX格式的日期为美国格式,这意味着前两位数字代表月份,后两位数字代表月份,后四位代表年份。 使用破折号时,日期假定为欧洲格式。 例如:
04/18/2017 = April 18, 2017
12/18/2017 = December 18, 2017
18-04-2017 = April 18, 2017
18-12-2017 = December 18, 2017
如果您不小心切换了日期和月份,则strtotime()
将返回false,因为日期无效。
18/04/2017 // error
18/12/2017 // error
04-18-2018 // error
12-18-2017 // error
上面的例子很简单。 但是,当日期不确定时,您可能会遇到问题。 例如:
04/12/2017 = April 12, 2017
12/04/2017 = December 4, 2017
04-12-2017 = December 4, 2017
12-04-2017 = April 12, 2017
在上面的示例中,通过切换日期和月份,我们仍然可以获得有效的日期,这可能会在您的应用程序中导致意外的结果。 为了解决这些潜在的问题,建议使用DateTime::createFromFormat()
解析日期广告并返回DateTime()
对象,从该对象可以获取Unix时间戳 , 将日期转换为另一种格式或将其与其他格式进行比较DateTime
对象。
// Parse US date format
$date1 = DateTime::createFromFormat('m/d/Y', '04/18/2017');
// Get Unix timestamp of 1493581268
$timestamp = $date1->getTimestamp();
// Parse European date format
$date2 = DateTime::createFromFormat('d-m-Y', ''18-04-2017);
// Get MySQL format (ISO-8601) of 2017-04-18
$mysqlDate = $date2->format('Y-m-d');
也可以看看:
对于您的特定情况,以下代码将起作用:
$date = $date1 = DateTime::createFromFormat('m/d/Y', '20/02/2000');
$D->query = $date->format('Y-m-d'); // 2000-02-20
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.