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 相关文章推荐
js 动态加载事件的几种方法总结
Dec 25 Javascript
jQuery $.extend()用法总结
Jun 15 Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 Javascript
JavaScript父子窗体间的调用方法
Mar 31 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
Jan 21 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
Sep 25 Javascript
JS实现灯泡开关特效
Mar 30 Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 Javascript
react PropTypes校验传递的值操作示例
Apr 28 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
Oct 28 Javascript
javascript实现前端分页功能
Nov 26 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
超级好用的一个php上传图片类(随机名,缩略图,加水印)
2010/06/30 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
php学习笔记之基础知识
2014/11/08 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
2016/03/21 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
用jquery统计子菜单的条数示例代码
2013/10/18 Javascript
javascript面向对象快速入门实例
2015/01/13 Javascript
JS自动倒计时30秒后按钮才可用(两种场景)
2015/08/31 Javascript
AngularJS基础 ng-open 指令简单实例
2016/08/02 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
详解angular ui-grid之过滤器设置
2017/06/07 Javascript
Angular搜索 过滤 批量删除 添加 表单验证功能集锦(实例代码)
2017/10/25 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
JavaScript中this的全面解析及常见实例
2019/05/14 Javascript
JS实现吸顶特效
2020/01/08 Javascript
jquery实现简单拖拽效果
2020/07/20 jQuery
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
Python中类的继承代码实例
2014/10/28 Python
python实现最长公共子序列
2018/05/22 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python提取log文件内容并画出图表
2019/07/08 Python
python 6.7 编写printTable()函数表格打印(完整代码)
2020/03/25 Python
解决django xadmin主题不显示和只显示bootstrap2的问题
2020/03/30 Python
深深扎根运动世界的生活品牌:Tillys
2017/10/30 全球购物
2014公司党员自我评价范文
2014/09/11 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
经销商会议开幕词
2016/03/04 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书