从php中的多种格式日期搜索并获取记录

时间:2018-09-03 06:18:42

标签: php joomla joomla3.0 joomla-extensions

我以不同的格式将日期存储在db表中,例如29-06-1991、1991年6月29日,1991年6月29日。我需要一个搜索查询才能获得所有1991年6月29日的日期记录。

$query = JFactory::getDbo()->getQuery(true);
$query->select('*');        
$query->from('#__orders');
$query->where('STR_TO_DATE(orderdateis,'%d-%m/%Y') ='.$db->Quote($rentaldate));
$db->setQuery($query);

2 个答案:

答案 0 :(得分:0)

我认为引号问题尝试更改以下内容

  

$ query-> where('STR_TO_DATE(orderdateis,'%d-%m /%Y')='。$ db-> Quote($ rentaldate));

     

     

$ query-> where(“ STR_TO_DATE(orderdateis,'%d-%m /%Y')=”。$ db-> Quote($ rentaldate));

尝试在MySQL控制台上执行查询

您可以使用以下API获取查询转储

  

echo $ query-> dump(); jexit();

答案 1 :(得分:0)

由于只有定界符会发生变化(而不是数字值的顺序),因此您可以非常有效地将LIKE与下划线一起使用以标记任何字符将在何处合格。

有效地,您准备好php变量以适合查询。 (Demo

$rentaldate = '29.06.1991';
$query->where("orderdateis LIKE " . $db->q(str_replace('.', '_', $rentaldate));

或者您可以不更改变量,而使用更昂贵的REGEXP调用来利用.的“魔术”来表示“任何字符”:(Demo

$rentaldate = '29.06.1991';
$query->where("orderdateis REGEXP " . $db->q($rentaldate))

我推荐第一个。我还应该指出,可以使用其他替代技术来完成此操作,但是正如我在上一个问题中提到的那样,应始终将日期值存储在date-type列中,以便于处理。

STR_TO_DATE()是一个有用的函数,但是不适合您的任务,因为它要求您指定传入日期格式,以便它可以正确读取字符串。不幸的是,您的日期字符串的格式不同。