2015-05-29 125 views
2

我想使用javascript的toISOString()函数并忽略时区。使用javascript的date.toISOString并忽略时区

var someDate; // contains "Tue May 26 2015 14:00:00 GMT+0100 (Hora de Verão de GMT)" 
dateIWant = someDate.toISOString(); // turns out "2015-05-26T13:00:00.000Z" 

日期转换是Tue May 26 2015 14:00:00 GMT+0100 (Hora de Verão de GMT)但转换后的日期是2015-05-26T13:00:00.000Z

所以,我需要在yyyy-MM-ddTHH:mm:ss:msZ的日期,但你可以看到它上面的应用时区,并改变从14到13

小时如何实现这一目标?

编辑

我工作的一个C#MVC的项目,我可以发送的日期,因为它是和操纵它在C#。这是我目前的解决方案,但我正在寻找一个客户端。

回答

5

基础上填充工具的Date.prototype.toISOString发现在MDN's Date.prototye.toISOString

if (!Date.prototype.toLocalISOString) { 
    (function() { 

    function pad(number) { 
     if (number < 10) { 
     return '0' + number; 
     } 
     return number; 
    } 

    Date.prototype.toLocalISOString = function() { 
     return this.getFullYear() + 
     '-' + pad(this.getMonth() + 1) + 
     '-' + pad(this.getDate()) + 
     'T' + pad(this.getHours()) + 
     ':' + pad(this.getMinutes()) + 
     ':' + pad(this.getSeconds()) + 
     '.' + (this.getMilliseconds()/1000).toFixed(3).slice(2, 5) + 
     'Z'; 
    }; 

    }()); 
} 

所以才用这个toLocalISOString代替toISOString

+1

谢谢你的答案,但有作为'toLocalISOString'的日期没有这样的方法。我不知道如何处理该代码 – chiapa

+0

在Ionut的方法中似乎存在拼写错误。我相信他所说的一个是LocaleISOString(注意“e” - 它是Locale,而不是Local)。我知道这是一个古老的线索,但也许它会帮助别人。 :) –

-1

您的Javascript语句正在产生预期结果。星期二2015年5月26日14:00:00 GMT + 0100与2015-05-26T13:00:00.000Z同时发生。除非你关心几分之一秒,否则GMT,UTC和Z都意味着同样的事情:平均太阳时间为0°经度,并且保持全年同一时间(夏天不变;冰岛全年观测这一次) 。 “GMT + 0100”是指比经度0°晚一小时的时区,例如夏季的英国。因此,在某一特定时刻,冰岛时间为2015-05-26T13:00:00.000Z,以及2015年5月26日14:00:00 GMT + 0100在伦敦。你能否澄清你想看到的结果?也许你会喜欢“2015-05-26T14:00:00”,这是ISO 8601符号在某些未指定的当地时间,可能是计算机显示Javascript的当地时间。或者,您可能想要“2015-05-26T14:00:00 + 01:00”,即在经度0°之前一小时为当地时区的ISO 8601标记,如夏季的伦敦或冬季的巴黎。

上souldreamer的例子大厦,使其充分的工作,并提供本地时间偏移量:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<body> 
<pre> 
<script language="JavaScript"> 
    if (!Date.prototype.toLocalISOString) { 
     // Anonymous self-invoking function 
     (function() { 

      function pad(number) { 
       if (number < 10) { 
        return '0' + number; 
       } 
       return number; 
      } 

      Date.prototype.toLocalISOString = function() { 
       timestamp = this.getFullYear() + 
        '-' + pad(this.getMonth() + 1) + 
        '-' + pad(this.getDate()) + 
        'T' + pad(this.getHours()) + 
        ':' + pad(this.getMinutes()) + 
        ':' + pad(this.getSeconds()); 
       if (this.getTimezoneOffset() == 0) { timestamp = timestamp + "Z" } 
       else { 
        if (this.getTimezoneOffset() < 0) { timestamp = timestamp + "+" } 
        else { timestamp = timestamp + "-" } 
        timestamp = timestamp + pad(Math.abs(this.getTimezoneOffset()/60).toFixed(0)); 
        timestamp = timestamp + ":" + pad(Math.abs(this.getTimezoneOffset() % 60).toFixed(0)); 
       } 
       return timestamp; 
      }; 

     }()); 
    } 
    now = new Date(); 
    document.writeln("Create date object containing present time and print UTC version."); 
    document.writeln(now.toUTCString()); 
    document.writeln("Show local time version"); 
    document.writeln(now.toLocalISOString()); 
</script> 
</pre>