code: function objectToDate(value, sm) {
    var d = Object.keys(value).reduce((x, k) => {
      var term = TERM[k.toLowerCase()];
      var v = value[k];
      if (term && !(term in x) && typeof v === 'number') {
        x[term] = v;
      } else {
        x.err = true;
      }
      return x;
    }, {});
  
    if (d.err) {
      return null;
    }
  
    var td = new Date();
  
    if (!('y' in d ) && !('m' in d ) && !('d' in d )) {
      d.y = td.getFullYear();
      d.m = td.getMonth() + 1;
      d.d = td.getDate();
    }
  
    var month = 'm' in d ? d.m : sm;
    var year  = 'y' in d ? d.y : td.getFullYear() - (month < sm ? 1 : 0);
  
    return new Date(
      year,
      month - 1,
      'd'  in d ? d.d  : 1,
      'h'  in d ? d.h  : 0,
      'i'  in d ? d.i  : 0,
      's'  in d ? d.s  : 0,
      'ms' in d ? d.ms : 0
    );
  }
docs: ******************************************************** オブジェクト => 日時 
  CONFIG.TERMに設定されているキーと値に数字を設定したオブジェクトを
  日時にします
  存在しない日時でも繰り上げ、繰り下げを行います
  存在しないtermや同じtermのキーを使用したり値が数字でない場合はnullを返します
  
  @param  {Object} value
  @param  {Number} sm
  @return {Date}   date