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 相关文章推荐
window.open的页面如何刷新(父页面)上层页面
Dec 28 Javascript
jQuery+.net实现浏览更多内容(改编php版本)
Mar 28 Javascript
asm.js使用示例代码
Nov 28 Javascript
把jQuery的类、插件封装成seajs的模块的方法
Mar 12 Javascript
原生JS实现平滑回到顶部组件
Mar 16 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
js获取一组日期中最近连续的天数
May 25 Javascript
全面介绍vue 全家桶和项目实例
Dec 27 Javascript
js判断文件类型大小并给出提示的实现方法
Jan 03 Javascript
基于openlayers4实现点的扩散效果
Aug 17 Javascript
在vue项目创建的后初始化首次使用stylus安装方法分享
Jan 25 Javascript
判断js数据类型的函数实例详解
May 23 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中日期加减法运算实现代码
2011/12/08 PHP
PHP 7.1新特性的汇总介绍
2016/12/16 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
javascript json2 使用方法
2010/03/16 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
JavaScript动态修改背景颜色的方法
2015/04/16 Javascript
node.js实现端口转发
2016/04/14 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
Ionic 2 实现列表滑动删除按钮的方法
2017/01/22 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
vue打包后显示空白正确处理方法
2017/11/01 Javascript
vue中的模态对话框组件实现过程
2018/05/01 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
JavaScript实现滚动加载更多
2020/12/27 Javascript
Python+MongoDB自增键值的简单实现
2016/11/04 Python
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
Python  Asyncio模块实现的生产消费者模型的方法
2021/03/01 Python
日本食品网上商店:JaponShop.com
2017/11/28 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
车间主管岗位职责
2013/11/14 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
见习报告的格式
2014/10/31 职场文书
初三语文教学计划
2015/01/22 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
党支部工作总结2015
2015/04/01 职场文书
少先队中队工作总结2015
2015/07/23 职场文书
火锅店的开业营销方案范本!
2019/07/05 职场文书
导游词之沈阳植物园
2019/11/30 职场文书
对讲机的最大通讯距离是多少
2022/02/18 无线电
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS