2016-08-21 105 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