题解 | #时间格式化输出#

时间格式化输出

https://www.nowcoder.com/practice/a789783e7c984f10a0bf649f6d4e2d59

高效,易读.
1. 高效代码,一次遍历,时间复杂度为O(n) (不追求性能可以直接用replace)
2. 日期解析,使用解构
3. 逐个字符进行处理, 匹配一位和两位字符数据。
4. 需要对yy和yyyy进行特殊处理
function formatDate(dat, format) {
  let [
    yyyy, M, d, H, m, s, w
  ] = [
      dat.getFullYear() + '',
      (dat.getMonth() + 1) + '',
      dat.getDate() + '',
      dat.getHours() + '',
      dat.getMinutes() + '',
      dat.getSeconds() + '',
      ['日', '一', '二', '三', '四', '五', '六'][dat.getDay()],
    ];
  // 使用padStart方法,如果不足两位,前面补0
  // let pad = (str, len) => str.padStart(len, '0');
  let pad = (str, len) => ('0' + str).slice(-2);
  let datMap = {
    yyyy: yyyy,
    yy: yyyy.slice(2),
    MM: pad(M, 2),
    M,
    dd: pad(d, 2),
    d: d,
    HH: pad(H, 2),
    H: H,
    hh: pad(H % 12 + '', 2),
    h: (H % 12 + ''),
    mm: pad(m, 2),
    m,
    ss: pad(s, 2),
    s,
    w
  };
  let firstChar = '';
  let yNum = 0;
  let res = [];
  for (let c of format) {
    if (c == 'y') {
      if (firstChar) {
        res.push(datMap[firstChar] || firstChar);
        firstChar = '';
      }
      yNum++;
    } else {
      // 处理y字符, yy,yyyy对应数据.
      res.push(datMap['y'.repeat(yNum)] || 'y'.repeat(yNum));
      yNum = 0;

      // 处理非y字符, 2位字符合并
      if (!datMap[c]) {
        if (firstChar) {
          res.push(datMap[firstChar] || firstChar);
          firstChar = '';
        }
        res.push(c);
      } else {
        if (!firstChar) firstChar = c;
        else {
          if (firstChar != c) {
            res.push(datMap[firstChar]);
            firstChar = c;
          } else {
            res.push(datMap[c + c] || (c + c));
            firstChar = '';
          }
        }
      }
    }
  }
  if (firstChar) res.push(datMap[firstChar] || firstChar);
  return res.join('');
}


全部评论

相关推荐

05-12 11:09
已编辑
门头沟学院 后端
已注销:没必要放这么多专业技能的描述。这些应该是默认已会的,写这么多行感觉在凑内容。项目这块感觉再包装包装吧,换个名字,虽然大家的项目基本都是网上套壳的,但是你这也太明显了。放一个业务项目,再放一个技术项目。技术项目,例如中间件的一些扩展和尝试。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
能干的三文鱼刷了10...:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
测试糕手手:社会第一课,随便吹牛逼,直接说四个月,别老实。老实人只会被欺负
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务