I receive a date in a string format with an offset, but javascript is converting it to local device time
var d = new Date("2012-11-13T11:34:58-05:00");
debug.log(d);
returns Tue Nov 13 2012 17:34:58 GMT+0100 (CET)
var offset = d.getTimezoneOffset();
debug.log(offset);
returns -60 (my device is utc +1h)
I just want to have the time with the offset, or having the timezone offset mentioned in the string (-5h in the example)
The JavaScript getTimezoneOffset() method is used to find the timezone offset. It returns the timezone difference in minutes, between the UTC and the current local time. If the returned value is positive, local timezone is behind the UTC and if it is negative, the local timezone if ahead of UTC.
This difference is expressed with respect to UTC and is generally shown in the format ±[hh]:[mm], ±[hh][mm], or ±[hh]. So if the time being described is two hours ahead of UTC (such as in Kigali, Rwanda [approx. 30° E]), the UTC offset would be "+02:00", "+0200", or simply "+02".
Add the local time offset to the UTC time. For example, if your local time offset is -5:00, and if the UTC time is shown as 11:00, add -5 to 11.
240 is a time zone offset. It's more commonly written as -04:00 (Invert the sign, divide by 60). The US Eastern Time Zone is comprised of both Eastern Standard Time, which has the offset of -05:00 and Eastern Daylight Time, which has the offset of -04:00 .
Well the only solution I've found is to create my custom time object by parsing the string
//ex: 2012-11-13T10:56:58-05:00
function CustomDate(timeString){
var completeDate = timeString.split("T")[0];
var timeAndOffset = timeString.split("T")[1];
//date
this.year = completeDate.split("-")[0];
this.month = completeDate.split("-")[1];
this.day = completeDate.split("-")[2];
this.date = this.year + "/" + this.month + "/"+this.day;
//negative time offset
if (timeAndOffset.search("-") != -1){
var completeOffset = timeAndOffset.split("-")[1];
this.offset = parseInt(completeOffset.split(":")[0]) * -1;
var originalTime = timeAndOffset.split("-")[0];
this.hours = parseInt(originalTime.split(":")[0]);
this.minutes = parseInt(originalTime.split(":")[1]);
this.seconds = parseInt(originalTime.split(":")[2]);
this.time = this.hours + ":" + this.minutes + ":"+this.seconds;
}
///positive time offset
else if (timeAndOffset.search(/\+/) != -1){
var completeOffset = timeAndOffset.split("+")[1];
this.offset = parseInt(completeOffset.split(":")[0]);
var originalTime = timeAndOffset.split("+")[0];
this.hours = parseInt( originalTime.split(":")[0]);
this.minutes = parseInt(originalTime.split(":")[1]);
this.seconds = parseInt(originalTime.split(":")[2]);
this.time = this.hours + ":" + this.minutes + ":"+this.seconds;
}
//no time offset declared
else{
this.hours = parseInt(timeAndOffset.split(":")[0]);
this.minutes = parseInt(timeAndOffset.split(":")[1]);
this.seconds = parseInt(timeAndOffset.split(":")[2]);
this.offset = 0;
this.time = this.hours + ":" + this.minutes + ":"+this.seconds;
}
}
For example if I want to display what is the received time 2012-11-13T11:34:58-05:00 in the specified timezone offset :
var aDate = new CustomDate("2012-11-13T11:34:58-05:00");
alert("date: " + aDate.date +" time: "+aDate.time+" offset: "+aDate.offset);
and I get
date: 2012/11/13 time: 11:34:58 offset: -5
The problem with this solution is that the date and time conventions are defined manually in the code, so they won't be automatically adapted to the user's language.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With