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 获取HTML DOM节点元素的方法小结
Apr 24 Javascript
javascript中的107个基础知识收集整理 推荐
Mar 29 Javascript
25个优雅的jQuery Tooltip插件推荐
May 25 Javascript
Javascript创建自定义对象 创建Object实例添加属性和方法
Jun 04 Javascript
javascript 拷贝节点cloneNode()使用介绍
Apr 03 Javascript
Javascript获取CSS伪元素属性的实现代码
Sep 28 Javascript
jquery事件绑定解绑机制源码解析
Sep 19 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
Oct 09 Javascript
Bootstrap下拉菜单样式
Feb 07 Javascript
微信小程序实现带刻度尺滑块功能
Mar 29 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
Oct 23 jQuery
vue element实现表格合并行数据
Nov 30 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
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
PDO防注入原理分析以及使用PDO的注意事项总结
2014/10/23 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
php实现给二维数组中所有一维数组添加值的方法
2017/02/04 PHP
php swoft框架实例用法
2020/12/22 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
关于URL中的特殊符号使用介绍
2011/11/03 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
JS本地刷新返回上一页代码
2016/07/25 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
jQuery中select与datalist制作下拉菜单时的区别浅析
2016/12/30 Javascript
Easyui Tree获取当前选择节点的所有顶级父节点
2017/02/14 Javascript
Vue2.0 从零开始_环境搭建操作步骤
2017/06/14 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
使用Python实现BT种子和磁力链接的相互转换
2015/11/09 Python
python基于C/S模式实现聊天室功能
2019/01/09 Python
python实现俄罗斯方块游戏(改进版)
2020/03/13 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
纯CSS3实现3D旋转书本效果
2016/03/21 HTML / CSS
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
开工庆典邀请函范文
2014/01/16 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
中等生评语大全
2014/05/04 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
python for循环赋值问题
2021/06/03 Python