Reputation: 445
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)
Upvotes: 7
Views: 2530
Reputation: 333
I don't think that JavaScript can provide an offset other then the local one as it doesn't know where the time you gave it came from..
So you've given it 2012-11-13T11:34:58-05:00
but no information about where this time originate, it could be the time in anywhere in the world, so it defaults to whatever your local timezone if for the offset.
Upvotes: 0
Reputation: 445
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.
Upvotes: 2