2012-11-13 47 views
4

的时区偏移我收到的日期以字符串格式有偏移,但JavaScript将其转换为本地设备时如何从一个字符串在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)

回答

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 

的问题此解决方案是日期和时间约定是在代码中手动定义的,因此它们不会自动适应用户的语言。

0

我不完全确定我知道你问什么,但我不认为JavaScript可以提供因为它不知道你给它的时间是从哪里来的......

所以你给了它“2012-11-13T11:34:58-05:00”但没有任何信息关于这个时间起源的地方,它可能是世界任何地方的时间,所以它默认为当地时区,如果是偏移量。

+0

我认为这是在时间的末尾(-05:00),表示时区偏移量的减5 在这个例子中,我说这是在纽约时间上午11:34。 – Omaty

+0

好吧,你可能是对的,林不知道。 那么你知道-60是-60分钟吗?所以我想你可以将它转换回-60/1 = -1小时,然后将它添加到字符串中。 –

+0

是的,我知道-60分钟是-60分钟,但已经太迟了,这表示设备时间偏移量,而不是字符串的偏移量。问题是我从服务器接收字符串的偏移量可能不同于字符串到另一个字符串,我只想读取字符串中指定时区的时间。 – Omaty