Javascript Date.toJSON don't get the timezone offset

前端 未结 2 940
被撕碎了的回忆
被撕碎了的回忆 2020-12-10 14:36

Well the problem is that I was using code like this:

new Date().toJSON().slice(0, 10)

to get my date as YYYY-MM-DD string, the

相关标签:
2条回答
  • 2020-12-10 15:01

    Date objects in ECMAScript are internally UTC. The timezone offset is used for local times.

    The specification for Date.prototype.toJSON says that it uses Date.prototype.toISOString, which states that "the timezone is always UTC". What your solution is doing is offsetting the UTC time value of the date object by the timezone offset.

    Consider adding your own method to Date.prototype, e.g.

    Date.prototype.toJSONLocal = function() {
      function addZ(n) {
        return (n<10? '0' : '') + n;
      }
      return this.getFullYear() + '-' + 
             addZ(this.getMonth() + 1) + '-' + 
             addZ(this.getDate());
    } 
    

    Edit

    If you want to squeeze extra performance, the following should be faster:

    Date.prototype.toJSONLocal = (function() {
        function addZ(n) {
            return (n<10? '0' : '') + n;
        }
        return function() {
          return this.getFullYear() + '-' +
                 addZ(this.getMonth() + 1) + '-' +
                 addZ(this.getDate());
        };
    }())
    

    But that smacks of premature optimisation, so unless you are calling it thousands of times in a very short period, I wouldn't bother.

    0 讨论(0)
  • 2020-12-10 15:02

    I haven't noticed that the toJSON method don't take into account your timezone offset

    But it does, it converts the local-time to Zulu (look at the end of the string: Z)

    new Date( "2012-01-02T03:04:05+02:00" ).toJSON()
    "2012-01-02T01:04:05.000Z"
    
    0 讨论(0)
提交回复
热议问题