2016-08-21 120 views
0

我从Joomla中使用CURDATE和NOW的自定义类中获取此查询。如何在mysql查询中使用自定义joomla日期

$query = "SELECT DISTINCT catid FROM table_x WHERE DATE(publish_up)=CURDATE() AND publish_up<=NOW()"; 

默认服务器时必须改变,所以我想改变它使用从这里所谓的Joomla自定义时间:

$date = JFactory::getDate('now', new DateTimeZone('Europe/Berlin')); 

我希望它对子级很容易(因为我还挺nooby)像

....WHERE DATE(publish_up)='".$date."' AND .... 

但它不起作用 有什么想法吗?

+0

在MySQL日期文字应该是在''YYYY-MM-DD HH:MM:ss''格式。格式化日期输出以符合此格式。 – Shadow

+0

所以你的意思是创建第二个变量格式$日期? – JoePanpi

回答

0

SQL CURDATE()和NOW()使用不同的格式 http://www.w3schools.com/sql/func_curdate.asp 所以如果你想将它们与你的约会比较,你需要准备的权利

请看看示例代码下面

$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旧的然后V3.3,你应该使用

$curdate = JFactory::getDate('now', new DateTimeZone('Europe/Berlin'))->toFormat('Y-m-d'); // 2016-08-23 

那么你可以使用j个建立查询数据库

$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文档 https://docs.joomla.org/How_to_use_JDate

+0

非常感谢。这真的很有帮助。似乎有Joomla API的限制,或者我错过了一些东西。只要使用 - > format('Y-m-d'),日期就会返回到UTC。如果使用像getDate('now +2 hour') - > format('Y-m-d')这样的其他格式,则它可以正常工作。有没有新的DateTimeZone('欧洲/柏林')? – JoePanpi

+0

Joomla默认保存并使用时间作为UFC,并且认为这是我在调用getDate时使用的格式。 您也可以在全局配置>服务器>时区更改默认时区,然后调用例如。全局配置中的 $ config = JFactory :: getConfig(); $ offset = $ config-> get('offset'); $ timezone = new DateTimeZone($ offset); $ date = new JDate(); $ date-> setTimezone($ timezone); echo $ date; 或来自用户设置 $ timezone = new DateTimeZone(JFactory :: getUser() - > getParam('timezone')); $ date = new JDate(); $ date-> setTimezone($ timezone); echo $ date; –

+0

Thanx再次为您提供帮助。使用全球时区是一个更好的主意。尽管如此。我无法格式化$ curdate查询将其读取为Y-m-d。我添加'$ curdate->格式('Y-M-d');'但它将它返回到UTC。格式起作用的唯一情况就是回声。 'echo $ curdate-> format('YM-d');'但是这是没用的,因为我需要它在查询前形成 – JoePanpi