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 类twitter的文本字数限制带提示效果插件
Apr 16 Javascript
Javascript通过overflow控制列表闭合与展开的方法
May 15 Javascript
jquery中键盘事件小结
Feb 24 Javascript
深入理解AngularJS中的ng-bind-html指令
Mar 27 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
Oct 24 Javascript
ionic grid(栅格)九宫格制作详解
Jun 30 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
Oct 25 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
Jun 10 Javascript
vue 集成jTopo 处理方法
Aug 07 Javascript
js实现课堂随机点名系统
Nov 21 Javascript
JS实现简易留言板增删功能
Feb 08 Javascript
一百多行代码实现react拖拽hooks
Mar 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实现utf-8转unicode函数分享
2015/01/06 PHP
PHP经典面试题集锦
2015/03/19 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
解析jQuery与其它js(Prototype)库兼容共存
2013/07/04 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
在父页面得到zTree已选中的节点的方法
2015/02/12 Javascript
jQuery删除节点用法示例(remove方法)
2016/09/08 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
JS中的Replace()传入函数时的用法详解
2017/09/11 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
[53:10]完美世界DOTA2联赛决赛日 FTD vs GXR 第二场 11.08
2020/11/11 DOTA
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
python字符串中的单双引
2017/02/16 Python
Python3实现个位数字和十位数字对调, 其乘积不变
2020/05/03 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
国际书籍零售商:Wordery
2017/11/01 全球购物
精油和天然健康美容产品:Art Naturals
2018/01/27 全球购物
美国保健品专家:Life Extension
2018/05/04 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
Exception类的常用方法
2012/06/16 面试题
上班早退检讨书
2014/01/09 职场文书
支行行长竞聘演讲稿
2014/05/15 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
庆祝国庆节标语
2014/10/09 职场文书
追悼会悼词大全
2015/06/23 职场文书
pytorch MSELoss计算平均的实现方法
2021/05/12 Python
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python