覆盖日期原型方法

override Date prototype method

我在客户端中有大量日期,我想将它们以 JSON 字符串的形式发送到服务器 没有时区 ,也就是说,我只想发送 2015-04-01(客户端本地日期)而不是 2015-03-31T16:00:00.000Z,这是相应的 UTC 日期。在我看来,最简单的实现方式就是覆盖 .toJSON.

我最初的想法是使用 datetime.js 例如:

function toJSON(dt) {
    return datetime.strftime(dt, '%Y-%m-%d');
}

Date.prototype.toJSON = toJSON;

但是,我不知道如何引用 dt(实例的 self)来完成。

是的,我还在想Python……

由于toJSON被指定为原型方法,this将引用方法内部的日期所以

function toJSON() {
    return datetime.strftime(this, '%Y-%m-%d');
}

Date.prototype.toJSON = toJSON;

也许你需要 datetime.js 做其他事情,但如果你只是为此使用 if,你可以考虑一个简单的函数(可能附加到 Date.prototype 或者给一个更有意义的名字):

function toJSON(d) {
  
    // Helper for padding
    function pad(n, len) {
      return ('000' + n).slice(-len);
    }
    
    // If not called on a Date instance, or timevalue is NaN, return undefined
    if (isNaN(d) || Object.prototype.toString.call(d) != '[object Date]') return;
    
    // Otherwise, return an ISO format local date string
    return pad(d.getFullYear(), 4) + '-' +
           pad(d.getMonth() + 1, 2) + '-' +
           pad(d.getDate(), 2);
  }

  document.write(toJSON(new Date()));