Php 如何在mysql查询中使用自定义joomla日期

Php 如何在mysql查询中使用自定义joomla日期,php,mysql,date,joomla,Php,Mysql,Date,Joomla,我从Joomla中的一个自定义类中得到了这个查询,该类使用CURDATE和NOW $query = "SELECT DISTINCT catid FROM table_x WHERE DATE(publish_up)=CURDATE() AND publish_up<=NOW()"; 我希望这会很容易,因为我有点像个疯子 ....WHERE DATE(publish_up)='".$date."' AND .... 但它不起作用 有什么想法吗?SQL CURDATE,现在使用不同的格式

我从Joomla中的一个自定义类中得到了这个查询,该类使用CURDATE和NOW

$query = "SELECT DISTINCT catid FROM table_x WHERE DATE(publish_up)=CURDATE() AND publish_up<=NOW()";
我希望这会很容易,因为我有点像个疯子

....WHERE DATE(publish_up)='".$date."' AND ....
但它不起作用
有什么想法吗?

SQL CURDATE,现在使用不同的格式 因此,如果你想将它们与你的约会对象进行比较,你需要做好准备

请看下面的示例代码

$nowdate = JFactory::getDate('now', new DateTimeZone('Europe/Berlin')); // 2016-08-23 15:01:14
$curdate = JFactory::getDate('now', new DateTimeZone('Europe/Berlin'))->format('Y-m-d'); // 2016-08-23
对于Joomla older v3.3,您应该使用

$curdate = JFactory::getDate('now', new DateTimeZone('Europe/Berlin'))->toFormat('Y-m-d'); // 2016-08-23
然后可以使用JDatabase构建查询

$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select("distinct ". $db->quoteName('id'));
$query->from($db->quoteName('#__content'));
$query->where($db->quoteName('publish_up') .' <= '. $db->quote( $nowdate )); //today and older
$query->where('Date('.$db->quoteName('publish_up').')' . ' = '.  $db->quote( $curdate )); // today
$query->order('id ASC');

$db->setQuery($query);

$rows = $db->loadRowList();
print_r($rows);
请看一下JDate文档

在mysql中,日期文字应为'YYYY-MM-DD hh:MM:ss'格式。格式化日期输出以符合此格式。那么您的意思是创建第二个变量来格式化$date?非常感谢。这真的很有帮助。不过,JoomlaAPI似乎有一个限制,或者我遗漏了一些东西。一旦使用->格式“Y-m-d”,日期将返回UTC。如果使用不同的格式,如getDate'now+2 hour'->格式'Y-m-d',它可以正常工作。有没有其他方法来代替新的DateTimeZone'Europe/Berlin'?Joomla默认情况下将时间保存并使用为UFC,并且认为我在调用getDate时使用的格式是这样的。您还可以在全局配置>服务器>时区中更改默认时区,然后从全局配置$config=JFactory::getConfig$offset=$config->get'offset'$时区=新日期时区$offset$日期=新的JDate$日期->设置时区$时区;echo$日期;或者从用户设置$timezone=new DateTimeZone JFactory::getUser->getParam'timezone'$日期=新的JDate$日期->设置时区$时区;echo$日期;再次感谢您的帮助。使用全球时区是一个更好的主意。不过还是一样。我无法格式化$curdate以使查询将其读取为Y-m-d。我添加$curdate->format'Y-M-d';但它会将其返回给UTC。格式工作的唯一情况是在回音上。echo$curdate->Y-M-d格式;但是这是没有用的,因为我需要在我说的是$curdate=JFactory::getDate'now',new DateTimeZone'Europe/Berlin'->format'Y-m-d'之前格式化它;不起作用。无论时区如何,它都会返回格式化的UTC。您的权利:请尝试使用它,我相信这会有所帮助$日期->格式“Y-m-d”,正确;UTC和本地时区之间的第二个参数切换。
$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select("distinct ". $db->quoteName('id'));
$query->from($db->quoteName('#__content'));
$query->where($db->quoteName('publish_up') .' <= '. $db->quote( $nowdate )); //today and older
$query->where('Date('.$db->quoteName('publish_up').')' . ' = '.  $db->quote( $curdate )); // today
$query->order('id ASC');

$db->setQuery($query);

$rows = $db->loadRowList();
print_r($rows);