javascript中Date对象的getDay方法使用指南


Posted in Javascript onDecember 22, 2014

Date对象有个getDay方法,它根据本地时间,返回一个具体日期中一周的第几天。返回值从0~6,分别对应周日~周六

getDay 0 1 2 3 4 5 6
星期几 周日 周一 周二 周三 周四 周五 周六

用到日期相关的需求时需要将getDay返回的值转成星期几,即“这一天”是星期几?比如日历组件中选择日历后返回 “2014-12-22 周一”。

javascript中Date对象的getDay方法使用指南

这是一段依然在线上运行的代码

/*

 * 根据Date对象返回星期几

 *  @param {Date} date

 *  @return {String} "星期三"

 */

function getChineseWeekByDate(date) {

    var numWeekDay = date.getDay();

    if (numWeekDay == 0) {

        return '周日';

    } else if (numWeekDay == 1) {

        return '周一';

    } else if (numWeekDay == 2) {

        return '周二';

    } else if (numWeekDay == 3) {

        return '周三';

    } else if (numWeekDay == 4) {

        return '周四';

    } else if (numWeekDay == 5) {

        return '周五';

    } else if (numWeekDay == 6) {

        return '周六';

    } else {

        return '';

    }

}

这段代码通过多个if else分支判断,返回星期几,有同学提到可以利用switch优化下

/*

 * 根据Date对象返回星期几

 *  @param {Date} date

 *  @return {String} "星期三"

 */

function getChineseWeekByDate(date) {

    var numWeekDay = date.getDay();

    switch (numWeekDay) {

        case 0: return '周日';

        case 1: return '周一';

        case 2: return '周二';

        case 3: return '周三';

        case 4: return '周四';

        case 5: return '周五';

        case 6: return '周六';

        default: return '';

    }

}

相比if/else,代码简且短清晰了不少。有人做过统计代码越简短,大脑思考的时间越短。因此你会看到各种《短码之美》,《代码简洁之道》等各种倡导和赞美“短码”的人和书。

《代码大全》提到利用表驱动法来简化编程

表驱动法 — 表驱动法是一种编程模式(scheme),从表里查找信息而不使用逻辑语句(if和switch)。事实上,凡是能通过逻辑语句来选择的,都可以通过查表来选择。对简单的情况而言,使用逻辑语句更为容易和直白。但随着逻辑链越来越复杂,查表法也就越发显得有吸引力。

上面提到利用表替代逻辑语句,JS里有不少前端工程师自从了解了函数式语言的一些特性,就拼命的用表达式消灭语句。比如

1. && 替代 单if

if (a == 1) {

    $.ajax(xx)

}

// -->

(a == 1) && $.ajax(xx)

2. ?: 替代 if/else

if (a == 1) {

    $.ajax(xx)

} else {

    $(yy).remove()

}

// -->

(a == 1) ? $.ajax(xx) : $(yy).remove()

3. 多个if/else和switch 也可以用多个“?:”替换

if (a == 1) {

    alert(1)

} else if (a == 2) {

    alert(2)

} else if (a == 3) {

    alert(3)

} else {

    alert(4)

}

// -->

(a == 1)

    ? alert(1) : (a == 2)

    ? alert(2) : (a == 3)

    ? alert(3) : alert(4)

另外,还可以用函数递归去消灭for/while语句。开始对这些写法比较上瘾,后来发现自己看不懂了(可能还是看的少,大脑总是自然的又将这些转换成语句),最后还是习惯用语句。

《代码大全》里说的表,我们用一个JS对象来替换试下

/*

 * 根据Date对象返回星期几

 *  @param {Date} date

 *  @return {String} "星期三"

 */

function getChineseWeekByDate(date) {

    var numWeekDay = date.getDay();

    var weekObj = {

        '0': '周日',

        '1': '周一',

        '2': '周二',

        '3': '周三',

        '4': '周四',

        '5': '周五',

        '6': '周六',

    };

    return weekObj[numWeekDay] ||  '';

}

相比switch,又减了不少代码,但还有0~6字样的key存在。getDay方法返回的从0开始恰好和JS数组索引一样也是从0开始。因此用数组可以再简化下

/*

 * 根据Date对象返回星期几

 *  @param {Date} date

 *  @return {String} "星期三"

 */

function getChineseWeekByDate(date) {

    var numWeekDay = date.getDay();

    var weekArr = ['周日', '周一','周二','周三','周四','周五','周六'];

    return weekArr[numWeekDay] ||  '';

}
Javascript 相关文章推荐
在视频前插入广告
Nov 20 Javascript
W3C Group的JavaScript1.8 新特性介绍
May 19 Javascript
JS 表单验证大全
Nov 23 Javascript
jquery select多选框的左右移动 具体实现代码
Jul 03 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
Nov 12 Javascript
浅谈关于JavaScript API设计的一些建议和准则
Jun 24 Javascript
JS数组去掉重复数据只保留一条的实现代码
Aug 11 Javascript
jQuery实现表格元素动态创建功能
Jan 09 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
Feb 26 Javascript
vuex 项目结构目录及一些简单配置介绍
Apr 08 Javascript
微信小程序自定义底部弹出框
Nov 16 Javascript
深入理解JS异步编程-Promise
Jun 03 Javascript
原生javaScript实现图片延时加载的方法
Dec 22 #Javascript
使用JavaScript链式编程实现模拟Jquery函数
Dec 21 #Javascript
使用jQuery简单实现模拟浏览器搜索功能
Dec 21 #Javascript
编写简单的jQuery提示插件
Dec 21 #Javascript
不使用ajax实现无刷新提交表单
Dec 21 #Javascript
webapp框架AngularUI的demo改造之路
Dec 21 #Javascript
浅析webapp框架AngularUI的demo
Dec 21 #Javascript
You might like
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
基于PHP Web开发MVC框架的Smarty使用说明
2013/04/19 PHP
关于file_get_contents返回为空或函数不可用的解决方案
2013/06/24 PHP
PHP自动生成表单代码分享
2015/06/19 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
JS实现距离上次刷新已过多少秒示例
2014/05/23 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
JavaScript实现通过select标签跳转网页的方法
2016/09/29 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作
2020/09/10 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
pycharm安装图文教程
2017/05/02 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
python网络爬虫 CrawlSpider使用详解
2019/09/27 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
python爬虫构建代理ip池抓取数据库的示例代码
2020/09/22 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
3分钟英语演讲稿
2014/04/29 职场文书
2014年最新版离婚协议书范本
2014/11/25 职场文书
模范班主任事迹材料
2014/12/17 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
2015年度校学生会工作总结报告
2015/05/23 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
python实现过滤敏感词
2021/05/08 Python
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫