我收到带有偏移量的字符串格式的日期,但javascript正在将其转换为本地设备时间
var d = new Date("2012-11-13T11:34:58-05:00");
debug.log(d);
返回 2012年11月13日星期二17:34:58 GMT + 0100(CET)
var offset = d.getTimezoneOffset();
debug.log(offset);
返回 -60 (我的设备是utc + 1h)
我只想拥有偏移量的时间,或者在字符串中提到时区偏移量(示例中为-5h)
答案 0 :(得分:1)
我找到的唯一解决方案是通过解析字符串
来创建我的自定义时间对象//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;
}
}
例如,如果我想在指定的时区偏移量中显示2012-11-13T11:34:58-05:00的接收时间:
var aDate = new CustomDate("2012-11-13T11:34:58-05:00");
alert("date: " + aDate.date +" time: "+aDate.time+" offset: "+aDate.offset);
我得到了
date: 2012/11/13 time: 11:34:58 offset: -5
此解决方案的问题是日期和时间约定是在代码中手动定义的,因此它们不会自动适应用户的语言。
答案 1 :(得分:0)
我不完全确定我知道你的要求,但我不认为javascript可以提供除本地之外的偏移,因为它不知道你给它的时间来自哪里..
所以你已经给了它“2012-11-13T11:34:58-05:00”但没有关于这个时间起源的地方的信息,它可能是世界上任何地方的时间,所以它默认为你的任何如果是偏移量,则为当地时区。