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 相关文章推荐
Javascript图像处理—平滑处理实现原理
Dec 28 Javascript
artDialog双击会关闭对话框的修改过程分享
Aug 05 Javascript
JS获取几种URL地址的方法小结
Feb 26 Javascript
JS实现简单路由器功能的方法
May 27 Javascript
JAVASCRIPT代码编写俄罗斯方块网页版
Nov 26 Javascript
深入分析node.js的异步API和其局限性
Sep 05 Javascript
详解Angular2中Input和Output用法及示例
May 21 Javascript
angular或者js怎么确定选中ul中的哪几个li
Aug 16 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
Dec 09 Javascript
学习jQuery中的noConflict()用法
Sep 28 jQuery
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
Aug 26 Javascript
微信小程序在text文本实现多种字体样式
Nov 08 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自动跳转中英文页面
2008/07/29 PHP
PHP编实现程动态图像的创建代码
2008/09/28 PHP
php实现在多维数组中查找特定value的方法
2015/07/29 PHP
配置Nginx+PHP的正确思路与过程
2016/05/10 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
PHP开发制作一个简单的活动日程表Calendar
2016/06/20 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
CI框架AR数据库操作常用函数总结
2016/11/21 PHP
Thinkphp3.2实用篇之计算型验证码示例
2017/02/09 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
网络之美 JavaScript中Get和Set访问器的实现代码
2010/09/19 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
jQuery中的read和JavaScript中的onload函数的区别
2014/08/27 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
vuejs指令详解
2017/02/07 Javascript
AngularJS实现自定义指令及指令配置项的方法
2017/11/20 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
简单了解JavaScript中常见的反模式
2019/06/21 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
Windows下PyMongo下载及安装教程
2015/04/27 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
Python自动调用IE打开某个网站的方法
2015/06/03 Python
总结用Pdb库调试Python的方式及常用的命令
2016/08/18 Python
Windows下安装Scrapy
2018/10/17 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
大学生职业规划范文:象牙塔生活的四年计划
2014/01/14 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
解决mysql:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO/YES)
2021/06/26 MySQL
logback 实现给变量指定默认值
2021/08/30 Java/Android
MySQL创建定时任务
2022/01/22 MySQL