Sziasztok,
A kerdesem egyszeru, de sok tesztesetet igenyel, amiket nem en akarok "elsokent megkeresni", ha mar mas is megtette. Adott egy erosen multilanguage, tobb orszagbol es tobb idozonabol hasznalt backoffice. Meg egy rakas adat, amit GROUP BY DATE(created_at)-ezik a mysql mikor grafikont rajzolunk. a GROUP BY DATE(created_at) szeretnenk, ha a browser idozonajanak megfeleloen futna le (form fieldkent kuldjuk, PHP adja at es escape-eli amugy).
Amit szeretnek:
Input:
JS-bol a browser felhasznalojanak timezone-ja valamilyen formaban (lehetoleg minel kevesebb (idealis esetben nulla) kulso lib felhasznalasaval. JQuery-t es moment.js -t amugy include-ol a projekt, de a Date() sem tunik olyan butanak, legjobban annak orulnek, ha csak az kene hozza)
Output:
String, amit a mysql megeszik, es atallitja azalapjan megfelelore az idozonat
(Ugy erzem a ketto kozt lesz valami szabvany amit nem ismerek/nem jut eszembe/nem vagyok biztos a teszteseteiben)
Peldak:
Tegyuk fel hogy iden nyaron vagyunk Londonban, vagy Budapesten
JS:
var d = new Date()
var n = d.getTimezoneOffset();
// n == -60 ha London (UTC vs BST (DST)), -120 Budapesten
MySQL-hez string generalas:
// summer: (in winter different offsets apply)
case -60:
return "SET time_zone = 'Europe/London';";
case -120:
return "SET time_zone = 'Europe/Budapest';";
Ahol futnia kell a JS resznek: mindenkori legujabb Chrome-on es Safarin (iOS mobil miatt) kivul sehol. Tehat nem zavar, ha nem fut IE8-on pl.
Elso ranezesre mukodo, de altalam nem kedvelt workaround (meg amugy sem tudom, hogy a nyari-teli valtas benne van-e, ha meg is oldom elmeletben, teszteset problemaim tovabbra is lesznek):
GROUP BY DATE(CONVERT_TZ(created_at,'+00:00','+02:00'))