Couple of days ago I made the decision to greatly help Yves having a datetime bug in Matukio ( dating back to to its “Seminar” origins). Every thing appeared to be hassle free. I have caused JDate in past times along with some knowledge about timezones. Therefore the challenge was taken by me convinced that we’ll invest 2h and every thing could be fine. Well, since it usually takes place a job that is 2h to be a single . 5 time task. (this can make an extremely good article about quotes, but we’ll accomplish that another time. )
Consumer A fills out a questionnaire, that has a field that stores a night out together
The thing that is best to accomplish once you shop the date when you look at the db is always to transform it to UTC. Why to UTC? Well that way you’ll have always a kick off point and|point that is starting} whenever you provide the production to your user you can include various timezones with regards to the users place. The key let me reveal to transform the date back once again to UTC. Happily JDate will help us with this. In the event that you glance at the JDate course inside you will discover that the constructor really expects 2 parameters -> the date therefore the timezone. Then when you conserve a night out together you’ll want to do generally something similar to this:
Now the relevant real question is -> how will you properly determine a timezone? Well, joomla helps us with this too. You can compose a little energy function that would seem like this:
In the 1st line we attempt to obtain the individual timezone, when you look at the 2nd we have the config timezone that is global. Then we pass the value of it to the DateTimeZone object if the user has set a timezone in his configuration. Then we use the global one if the user on the other hand has not set a timezone. Now that people have actually the most suitable time area we could format the date towards the MySQL structure and shop it into the database.
The parameter that is first the format function is ‘Y-m-d H:i:s’ – this is actually the structure we wish our date become conserved into the db. The 2nd parameter informs the event we want the GMT/UTC some time the next parameter informs the format function that people wouldn’t like to convert the date.
you can now conserve a proper UTC date in your database
After you have which you will clearly desire to show the date to your individual once more. This will be additionally fairly self-explanatory supplied that you don’t result in the exact exact exact exact same mistake as being i did so. I stored in the DB I was thinking – hm, the second parameter that I pass to JDate is the timezone, so obviously I need to pass the timezone I want my date to be presented in when I was trying to show the date. Thus I used my utility function and passed the timezone as a 2nd parameter. After I expected my date was actually 2h off that I just used the format function to output the date, but to my astonishment instead of showing the correct date and time. I needed to have a romantic date into the Berlin timezone, which is +1 (and +1 for DST), but we somehow finished with a romantic date which was -2. I possibly couldn’t determine what was taking place. Therefore ultimately we finished up buying a book that relates to the time and date topic in level: development – a tremendously good guide on the niche and an excellent browse for each PHP designer. After couple of hours reading we discovered several things that i did not understand , but unfortuitously we nevertheless could not realize why my date ended up being -2h off.
Fundamentally it hit me personally such as a lightning! The parameter that is second here to simply help JDate transform the date to UTC, I became not designed to pass a timezone parameter if my date was at the UTC timezone. Here’s what I experienced to accomplish:
Effortless is not it? Additionally there are few items that could possibly be helpful to understand:
- JHtml::_(‘date’, $myDate) will output an date that is UTC the consumer’s timezone immediately -> generally there isn’t should calculate the timezone yourself.
- JHtml::_(‘calender’, myDate . ) will not transform the date towards the individual’s timezone that you provide the date with the correct timezone so you have to make sure
- You can provide a filter: SERVER_UTC or USER_UTC that will handle the timezone calculations for you if you use JForm calender time.
I am hoping that this post can save you a while and which you discovered one thing 🙂 For those who have any queries or remarks utilize the remark area below!