Ciò è causato dal fatto che Magento esegue le date di analisi dal database per impostarle nel fuso orario impostato su System > Configuration > General > Locale Options > Timezone
. Ma in realtà salva i valori nel database in GMT.
Ma questa è un'informazione si può ottenere e convertire allo stesso modo:
Soluzione 1: che considerano l'ora legale turno, ma si ha bisogno di server MySQL essere configurato correttamente e fusi orari da caricare correttamente .
Per capire se i fusi orari vengono caricati sul server, eseguire la query
select * from mysql.time_zone_name;
Se che si restituisce un elenco dei fusi orari, si dovrebbe essere pronti per partire (anche se altre tabelle possono avere a essere riempito correttamente, si prega di consultare anche questa risposta: https://stackoverflow.com/a/15419843/2123530)
Se non si dispone di tutti i record in questa tabella, si prega di fare riferimento al manuale di MySQL su come caricare quelle informazioni sul server: http://dev.mysql.com/doc/refman/5.7/en/mysql-tzinfo-to-sql.html
Poi, quando y ou sono tutti buoni, che dovrebbe essere la query corretta:
$GMTToLocaleTZDiff = Mage::getStoreConfig('general/locale/timezone',0);
$collection->getSelect()
->columns('SUM(base_grand_total) AS total')
->columns('COUNT(*) AS orders_count')
->columns('DATE_FORMAT(created_at, "%d") AS order_day')
->columns('DATE_FORMAT(created_at, "%d/%m/%y") AS order_date')
->columns('AVG(base_grand_total) AS avg_total')
->columns('MAX(base_grand_total) AS max_total')
->columns('MIN(base_grand_total) AS min_total')
->columns("CONVERT_TZ(created_at,'GMT','".$GMTToLocaleTZDiff."') AS created_at")
->where('DATE_FORMAT(created_at, "%m") = ?', $month)
->where('DATE_FORMAT(created_at, "%Y") = ?', $year)
->group('DATE_FORMAT(created_at, "%d-%m-%y")');
Soluzione 2: Che potrebbe ancora si realizzi un trasferimento un'ora a causa del legale
$GMTToLocaleTZDiff = Mage::getSingleton('core/locale')->storeDate()->get(Zend_Date::GMT_DIFF_SEP);
$collection->getSelect()
->columns('SUM(base_grand_total) AS total')
->columns('COUNT(*) AS orders_count')
->columns('DATE_FORMAT(created_at, "%d") AS order_day')
->columns('DATE_FORMAT(created_at, "%d/%m/%y") AS order_date')
->columns('AVG(base_grand_total) AS avg_total')
->columns('MAX(base_grand_total) AS max_total')
->columns('MIN(base_grand_total) AS min_total')
->columns("CONVERT_TZ(created_at,'+00:00','".$GMTToLocaleTZDiff."') AS created_at")
->where('DATE_FORMAT(created_at, "%m") = ?', $month)
->where('DATE_FORMAT(created_at, "%Y") = ?', $year)
->group('DATE_FORMAT(created_at, "%d-%m-%y")');
suona come una problema del fuso orario. –
@rick si, qualche idea su come risolvere questo? – ROBIN
'MOSTRA VARIABILI COME '% zone';' e ricerca le due impostazioni che mostra. Scopri a cosa è impostato il sistema operativo. E cosa fa Magento. –