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 动态酷效果实现总结
Dec 27 Javascript
javascript实现可改变滚动方向的无缝滚动实例
Jun 17 Javascript
JQuery实现倒计时按钮具体方法
Nov 14 Javascript
javascript下拉框选项单击事件的例子分享
Mar 04 Javascript
使用javaScript动态加载Js文件和Css文件
Oct 24 Javascript
AngularJS中的指令全面解析(必看)
May 20 Javascript
js计算系统当前日期是星期几的方法
Jul 14 Javascript
Easyui使用Dialog行内按钮布局的实例
Jul 27 Javascript
javascript Function函数理解与实战
Dec 01 Javascript
AngularJS自定义表单验证功能实例详解
Aug 24 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
Dec 11 Javascript
VUE动态生成word的实现
Jul 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
个人站长制做网页常用的php代码
2007/03/03 PHP
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
php中照片旋转 (orientation) 问题的正确处理
2017/02/16 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
显示、隐藏密码
2006/07/01 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
Vue CLI 2.x搭建vue(目录最全分析)
2019/02/27 Javascript
详解vue 命名视图
2019/08/14 Javascript
微信小程序实现购物车小功能
2020/12/30 Javascript
总结Python编程中函数的使用要点
2016/03/20 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
python连接数据库的方法
2017/10/19 Python
pandas创建新Dataframe并添加多行的实例
2018/04/08 Python
python主线程捕获子线程的方法
2018/06/17 Python
python实现随机漫步算法
2018/08/27 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
python安装gdal的两种方法
2019/10/29 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
美国亚洲时尚和美容产品的一站式网上商店:Stylevana
2019/09/05 全球购物
酒店管理自荐信
2013/10/23 职场文书
思想品德自我评价
2014/02/04 职场文书
市场营销大学生职业规划书
2014/02/25 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
校车安全责任书
2014/08/25 职场文书
学生检讨书怎么写?
2014/10/10 职场文书
交通事故死亡赔偿协议书
2014/12/03 职场文书