使用javascript的date.toISOString并忽略时区

时间:2015-05-29 11:30:21

标签: javascript datetime date-conversion

我想使用javascript的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#中对其进行操作。这是我目前的解决方案,但我正在寻找客户端。

2 个答案:

答案 0 :(得分:6)

基于在RaiseException找到的Date.prototype.toISOString的polyfill:

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 :(得分:-1)

您的Javascript语句正在产生预期的结果。 2015年5月26日星期二14:00:00 GMT + 0100与2015-05-26T13:00:00.000Z同时。除非你关心的是一小部分,GMT,UTC和Z都意味着同样的事情:平均经度为0°的太阳时,全年保持相同的时间(夏季没有变化;冰岛全年都观察到这一次) 。 “GMT + 0100”表示比0°经度晚1小时的时区,例如夏季的英国。因此,在特定时刻,冰岛的时间是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”,这是当地时区的ISO 8601表示法,比经度0°提前一小时,例如夏季的伦敦或冬季的巴黎。

以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>