Proszę mi wybaczyć, jeśli jest to problem noob:Jak poprawnie zapisać strefę czasową za pomocą Rubiego i MongoID?
Mam aplikację, w której użytkownicy mogą ustawiać własne strefy czasowe w swoim profilu.
Kiedy ktoś doda lineup (specyficzna aplikacja terminologię), I wykonaj następujące czynności:
time = ActiveSupport::TimeZone.new(user.timezone).parse(
"Wednesday, 26 October, 2011 13:30:00"
)
# This outputs: 2011-10-26 13:30:00 +0200 - valid according to the user selected TZ
I następnie zapisać składzie:
Lineup.create({
:date => time.gmtime,
:uid => user._id,
:pid => product._id
})
ten powinien (teoretycznie) zapisać datę jako gmtime, ale otrzymuję następujące informacje podczas przeglądania rekordu:
{
"_id": ObjectId("4e9c6613e673454f93000002"),
"date": "Wed, 26 Oct 2011 13: 30: 00 +0200",
"uid": "4e9b81f6e673454c8a000001",
"pid": "4e9c6613e673454f93000001",
"created_at": "Mon, 17 Oct 2011 19: 29: 55 +0200"
}
Jak widać, pole daty jest wr ong - nadal utrzymuje strefę czasową użytkownika, powinien to być GMT, a nie strefa czasowa.
Jeśli I wyjściowego time.gmtime, uzyskać odpowiedni czas (które powinny być zapisane):
2011-10-26 11:30:00 UTC (correct)
pomysłów jak zapisać datę GMT tak, że faktycznie zapisuje datę GMT?
Działa również z DateTime w bieżących wersjach Mongoida (mam na 2.4.7). Zobacz https://github.com/mongoid/mongoid/issues/1135 –