toISOString()返回错误的日期

时间:2013-09-01 01:24:18

标签: javascript date

为什么这段代码会在明天的日期返回?

它必须返回2013-08-31而不是2013-09-01,因为我们是8月31日。

http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_toisostring

function myFunction() {
  var d = new Date();
  var x = document.getElementById("demo");
  x.innerHTML = d.toISOString();
}
<p id="demo">Click the button to display the date and time as a string, using the ISO
  standard.</p>
<button onclick="myFunction()">Try it</button>

2 个答案:

答案 0 :(得分:3)

是UTC。

如果您想获取当地时区,则必须自行设置日期格式(使用getYear() getMonth()等)或使用date.js之类的库来格式化日期

使用date.js非常简单:

(new Date()).format('yyyy-MM-dd')

修改

正如@MattJohnson所说,date.js已被放弃,但你可以使用像moment.js这样的替代品。

答案 1 :(得分:1)

使用:

new Date().toLocaleDateString('pt-br').split( '/' ).reverse( ).join( '-' );

(function() {

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

    Date.prototype.toISO1String = 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';
    };

  })();

请参阅:mozilla.org toISOString文档

我刚刚修改了