Goal: Find the local time
and UTC time offset
then construct the URL in following format.
Example URL: /Actions/Sleep?duration=2002-10-10T12:00:00−05:00
The format is based on the W3C recommendation: http://www.w3.org/TR/xmlschema11-2/#dateTime
The documentation says:
For example, 2002-10-10T12:00:00−05:00 (noon on 10 October 2002,
Central Daylight Savings Time as well as Eastern Standard Time in the U.S.)
is equal to 2002-10-10T17:00:00Z, five hours later than 2002-10-10T12:00:00Z.
So based on my understanding, I need to find my local time by new Date() then use getTimezoneOffset() function to compute the difference then attach it to the end of string.
1.Get local time with format
var local = new Date().format("yyyy-MM-ddThh:mm:ss"); //today (local time)
output
2013-07-02T09:00:00
2.Get UTC time offset by hour
var offset = local.getTimezoneOffset() / 60;
output
7
3.Construct URL (time part only)
var duration = local + "-" + offset + ":00";
output:
2013-07-02T09:00:00-7:00
The above output means my local time is 2013/07/02 9am and difference from UTC is 7 hours (UTC is 7 hours ahead of local time)
So far it seems to work but what if getTimezoneOffset() returns negative value like -120?
I'm wondering how the format should look like in such case because I cannot figure out from W3C document. Thanks in advance.
The below should work properly, and for all browsers (thanks to @MattJohnson for the tip)
getTimezoneOffset()
returns the opposite sign of the format required by the spec that you referenced.This format is also known as ISO8601, or more precisely as RFC3339.
In this format, UTC is represented with a
Z
while all other formats are represented by an offset from UTC. The meaning is the same as JavaScript's, but the order of subtraction is inverted, so the result carries the opposite sign.Also, there is no method on the native
Date
object calledformat
, so your function in #1 will fail unless you are using a library to achieve this. Refer to this documentation.If you are seeking a library that can work with this format directly, I recommend trying moment.js. In fact, this is the default format, so you can simply do this:
This is a well-tested, cross-browser solution, and has many other useful features.
This is my function for the clients timezone, it's lite weight and simple