JavaScriptコードの中で、日付データのJSONとDateオブジェクトの相互変換

JavaScriptコードの中で日付データのJSONとDateオブジェクトの変換をどうしようと悩んでたら、
なるほどと思う記事を見つけた。
【JavaScript】JSON.stringify/parse をカスタマイズしてDate型とかを使えるようにする - 藤 遥のブログ
ありがたく書いて頂いてるのですが、惜しいのは書かれていた const 宣言関数は、

const CustomJSON = {
    replacer (key, value) {
       :

となっていて、replacer (key, value) "{" の間に、":" が抜けているので、IE11 ではエラーになってしまう。
  SCRIPT1003: ':'がありません
JSON.stringify / parse 第2引数にコールバックされる関数を与えることに思わず「なるほどそういう方法が。。」
そこで、もう少しでも汎用的にならないかと、parse はどうしても無理と思ったが stringify だけでもと思い書いた。

const JsonDate = {
   UTC:function(key, value){
      if (this[key] instanceof Date){
         return this[key].getTime();
      }
      return value;
   },
   YMD:function(key, value){
      if (this[key] instanceof Date){
         return this[key].getFullYear()
          +"-"+ ("00"+(this[key].getMonth()+ 1)).slice(-2) 
          +"-"+ ("00"+(this[key].getDate())).slice(-2);
      }
      return value;
   },
   YMD_slash:function(key, value){
      if (this[key] instanceof Date){
         return this[key].getFullYear() 
         +"/"+ ("00"+(this[key].getMonth()+ 1)).slice(-2) 
         +"/"+ ("00"+(this[key].getDate())).slice(-2);
      }
      return value;
   },
   YYYYMMDD:function(key, value){
      if (this[key] instanceof Date){
         return this[key].getFullYear()
          + ("00"+(this[key].getMonth()+ 1)).slice(-2)
          + ("00"+(this[key].getDate())).slice(-2);
      }
      return value;
   },
   YMDHMS:function(key, value){
      if (this[key] instanceof Date){
         return this[key].getFullYear() 
         +"-"+ ("00"+(this[key].getMonth()+ 1)).slice(-2)
         +"-"+ ("00"+(this[key].getDate())).slice(-2)
         +" "+ ("00"+(this[key].getHours())).slice(-2)
         +":"+ ("00"+(this[key].getMinutes())).slice(-2)
         +":"+ ("00"+(this[key].getSeconds())).slice(-2);
      }
      return value;
   },
   YMDHMSL:function(key, value){
      if (this[key] instanceof Date){
         return this[key].getFullYear() 
         +"-"+ ("00"+(this[key].getMonth()+ 1)).slice(-2) 
         +"-"+ ("00"+(this[key].getDate())).slice(-2)
         +" "+ ("00"+(this[key].getHours())).slice(-2)
         +":"+ ("00"+(this[key].getMinutes())).slice(-2)
         +":"+ ("00"+(this[key].getSeconds())).slice(-2) 
         + "." ("000"+(this[key].getMilliseconds())).slice(-3);
      }
      return value;
   },
   parseYMD:function(str){
      return new Date(str + " 00:00:00");
   },
   parseYYYYMMDD:function(str){
      return new Date(str.slice(0,4)
            +"-"+ str.slice(4, 6)
            +"-"+ str.slice(-2)
            + " 00:00:00");
   },
   parseYMDHMSL:function(str){
      var d =  new Date(str.slice(0,19));
      d.setMilliseconds(str.slice(-3));
      return d;
   }
};

長いので、これを1つのJSソースして使い回せるだろう。
テストサンプルは、、、

var dt = new Date();
var data = { a:dt, "b":"test" };

JsonDate.UTC テスト

var txt = JSON.stringify(data, JsonDate.UTC, ' ');
var obj = JSON.parse(txt, function(key, value){
   if (key === 'a'){
      return new Date(value);
   }
   return value;
});

JsonDate.YMD テスト

var txt = JSON.stringify(data, JsonDate.YMD, ' ');
var obj = JSON.parse(txt, function(key, value){
   if (key === 'a'){
      return JsonDate.parseYMD(value);
   }
   return value;
});

JsonDate.YMD_slash テスト

var txt = JSON.stringify(data, JsonDate.YMD_slash, ' ');
var obj = JSON.parse(txt, function(key, value){
   if (key === 'a'){
      return JsonDate.parseYMD(value);
   }
   return value;
});

JsonDate.YYYYMMDD テスト

var txt = JSON.stringify(data, JsonDate.YYYYMMDD, ' ');
var obj = JSON.parse(txt, function(key, value){
   if (key === 'a' && value){
      return JsonDate.parseYYYYMMDD(value);
   }
   return value;
});

JsonDate.YMDHMS テスト

var txt = JSON.stringify(data, JsonDate.YMDHMS, ' ');
var obj = JSON.parse(txt, function(key, value){
   if (key === 'a' && value){
      return new Date(value);
   }
   return value;
});

JsonDate.YMDHMSL テスト

var txt = JSON.stringify(data, JsonDate.YMDHMSL, ' ');
var obj = JSON.parse(txt, function(key, value){
  if (key === 'a' && value){
     return JsonDate.parseYMDHMSL(value);
  }
  return value;
});

しかし、JavaScript で日付の処理と言えば、
やはり Moment.js | Home である。
この場面では、parse ぐらいしか思いつかないが、、
moment.js を使えば、JsonDate.YYYYMMDD と JsonDate.YMDHMSL の parse は、
関数は書く必要なく

var txt = JSON.stringify(data, JsonDate.YYYYMMDD, ' ');
var obj = JSON.parse(txt, function(key, value){
   if (key === 'a' && value){
      return moment(str, "YYYYMMDD").toDate();
   }
   return value;
});
var txt = JSON.stringify(data, JsonDate.YMDHMSL, ' ');
var obj = JSON.parse(txt, function(key, value){
  if (key === 'a' && value){
     return moment(str, "YYYY-MM-DD HH:mm:ss.SSS").toDate();
  }
  return value;
});

とも書けるが、momentインスタンス生成する分の処理時間はかかるので
moment.js を馬鹿の1つ覚えのように使うのもどうなのかと。。。