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 相关文章推荐
jQuery bxCarousel实现图片滚动切换效果示例代码
May 15 Javascript
JavaScript获取Url里的参数
Dec 18 Javascript
jquery操作select方法汇总
Feb 05 Javascript
javascript结合canvas实现图片旋转效果
May 03 Javascript
基于canvas实现的绚丽圆圈效果完整实例
Jan 26 Javascript
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题
Mar 09 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
Dec 06 Javascript
Angular中使用better-scroll插件的方法
Mar 27 Javascript
jQuery的ztree仿windows文件新建和拖拽功能的实现代码
Dec 05 jQuery
小程序中this.setData的使用和注意事项
Aug 28 Javascript
浅析JavaScript 函数柯里化
Sep 08 Javascript
在vue中使用inheritAttrs实现组件的扩展性介绍
Dec 07 Vue.js
原生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
destoon实现商铺管理主页设置增加新菜单的方法
2014/06/26 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
PHP下的浮点运算不准的解决方法
2016/10/27 PHP
php根据用户名和手机号查询是否存在手机号码
2017/02/16 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
js 获取服务器控件值的代码
2010/03/05 Javascript
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
关于Vue.js一些问题和思考学习笔记(1)
2016/12/02 Javascript
js评分组件使用详解
2017/06/06 Javascript
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
2017/08/04 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
js实现日历
2020/11/07 Javascript
vue下拉刷新组件的开发及slot的使用详解
2020/12/23 Vue.js
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
Django MEDIA的配置及用法详解
2019/07/25 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
感恩老师的演讲稿
2014/05/06 职场文书
公司员工离职证明书
2014/10/04 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
2015年测量员工作总结
2015/05/23 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
python基础之爬虫入门
2021/05/10 Python
浅谈Python中的函数(def)及参数传递操作
2021/05/25 Python
CSS文本阴影 text-shadow 悬停效果详解
2022/05/25 HTML / CSS
Golang实现可重入锁的示例代码
2022/05/25 Golang