练习牛客网笔试题--前端js--5- 按所给的时间格式输出指定的时间

练习牛客网笔试题--前端js--5- 按所给的时间格式输出指定的时间

// 题目描述

    // 按所给的时间格式输出指定的时间

    // 格式说明

    // 对于 2014.09.05 13:14:20

    // yyyy: 年份,2014

    // yy: 年份,14

    // MM: 月份,补满两位,09

    // M: 月份, 9

    // dd: 日期,补满两位,05

    // d: 日期, 5

    // HH: 24制小时,补满两位,13

    // H: 24制小时,13

    // hh: 12制小时,补满两位,01

    // h: 12制小时,1

    // mm: 分钟,补满两位,14

    // m: 分钟,14

    // ss: 秒,补满两位,20

    // s: 秒,20

    // w: 星期,为 ['日', '一', '二', '三', '四', '五', '六'] 中的某一个,本 demo 结果为 五

 

    // 输入  formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')

    // 输出  2014-09-05 13:14:20 星期五

 

1.自己的练习


    function formatDate(times, str) {
        // 1. 获取事件的具体信息
        var year = times.getFullYear();
        var month = times.getMonth() + 1;
        var date = times.getDate();
        var day = times.getDay();
        var week = ['日', '一', '二', '三', '四', '五', '六'];
        var hour = times.getHours();
        var minute = times.getMinutes();
        var second = times.getSeconds();

        // 2. 获取格式信息
        var arr = str.match(/\w+/g);
        var format = str.match(/\W+/g);
        format.push('');
        // 定义一个对象,保存格式--时间
        var obj = {};

        // 补0: 如果需要两位数,就补零,否则返回原数
        function addZero(time) {
            return time = time < 10 ? '0' + time : time;
        }

        // 3. 将信息保存到对象中
        // 年
        arr.some(function(value) {
            if(value == 'yyyy') {
                obj[value] = year;
            } else if(value === 'yy') {
                obj[value] = year.toString().slice(2);
            }
        }) 
        // 月
        arr.some(function(value) {
            if(value === 'MM') {
                obj[value] = addZero(month);
            } else if(value === 'M') {
                obj[value] = month;
            }
        })
        // 日
        arr.some(function(value) {
            if(value === 'dd') {
                obj[value] = addZero(date);
            } else if(value === 'd') {
                obj[value] = date;
            }
        })
        // 时
        arr.some(function(value) {
            if(value === 'H') {
                obj[value] = hour;
            } else if(value === 'HH') {
                hour = addZero(hour);
                    obj[value] = hour;
            } else if(value === 'h') {
                hour = hour > 12 ? hour - 12 : hour;
                obj[value] = hour;
            } else if(value === 'hh') {
                obj[value] = hour > 12 ? hour - 12 : hour;
                obj[value] = addZero(hour);
            }
        })
        // 分
        arr.some(function(value) {
            if(value === 'mm') {
                obj[value] = addZero(minute);
            } else if(value === 'm') {
                obj[value] = minute;
            }
        })
        // 秒
        arr.some(function(value) {
            if(value === 'ss') {
                obj[value] = addZero(second);
            } else if(value === 's') {
                obj[value] = second;
            }
        })
        // 周
        arr.some(function(value) {
            if(value === 'w') {
                obj[value] = week[day];
            } 
        })

        // 4. 拼接并输出时间
        var T = '';
        arr.forEach(function(value, index) {
            T += obj[value] + format[index];
        })
        return T;
    }     

2.题解

const log = console.log;
 
const formatDate = (time = (new Date()), format = ``) => {
  // timestamp
  let year = time.getFullYear();
  let month = time.getMonth() + 1;
  let date = time.getDate();
  if(!format.includes(`yyyy`)) {
    year = `{year}`.slice(2);
  }
  if(format.includes(`MM`)) {
    month = month > 9 ? month : `0` + month;
  }
  if(format.includes(`dd`)) {
    date = date > 9 ? date : `0` + date;
  }
  // 年月日
  // 24 HH
  let hour = time.getHours();
  let minute = time.getMinutes();
  let second = time.getSeconds();
  if(format.includes(`H`)) {
    if(format.includes(`HH`)) {
      hour = hour > 9 ? hour : `0` + hour;
    } else {
      // H
      // hour = hour;
    }
  } else {
    if(format.includes(`hh`)) {
      hour = hour > 12 ? `0` + (hour - 12) : `0` + hour;
    } else {
      // h
      hour = hour > 12 ? (hour - 12) : hour;
    }
  }
  if(format.includes(`mm`)) {
    minute = minute > 9 ? minute : `0` + minute;
  }
  if(format.includes(`ss`)) {
    second = second > 9 ? second : `0` + second;
  }
  // 时分秒
  const weekSet = ['日', '一', '二', '三', '四', '五', '六'];
  let weekDay = ``;
  const arr = format.split(` `).filter(i => i.includes(`w`));
  let desc = arr.length ? arr[0].replace(`w`, ``) : ``;
  if(format.includes(`w`)) {
    const day = time.getDay();
    weekDay = weekSet[day];
  }
  return `${year}-${month}-${date} ${hour}:${minute}:${second} ${desc}${weekDay}`.trim();
}
 
// formatDate(new Date(1409894060000), 'yyyy-MM-dd HH:mm:ss 星期w')
 
// "2014-09-05 13:14:20 星期五"
 
// 2014-09-05 13:14:20 星期五

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值