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模仿hover的具体实现代码
Dec 30 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
Aug 05 Javascript
JavaScript必知必会(二) null 和undefined
Jun 08 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
Sep 18 Javascript
BootStrop前端框架入门教程详解
Dec 25 Javascript
基于JavaScript实现活动倒计时效果
Apr 20 Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 Javascript
angular4 如何在全局设置路由跳转动画的方法
Aug 30 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
Sep 06 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
Jan 21 Javascript
JS指定音频audio在某个时间点进行播放
Nov 28 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
Dec 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
PHP4实际应用经验篇(7)
2006/10/09 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
PHP中strpos、strstr和stripos、stristr函数分析
2016/06/11 PHP
PDO::getAttribute讲解
2019/01/28 PHP
JQuery实现的在新窗口打开链接的方法小结
2010/04/22 Javascript
JS小功能(操作Table--动态添加删除表格及数据)实现代码
2013/11/28 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
Node.js利用js-xlsx处理Excel文件的方法详解
2017/07/05 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
2017/11/30 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
Moment.js实现多个同时倒计时
2019/08/26 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
深入解析Python的Tornado框架中内置的模板引擎
2016/07/11 Python
python僵尸进程产生的原因
2017/07/21 Python
python编程通过蒙特卡洛法计算定积分详解
2017/12/13 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
对Django中的权限和分组管理实例讲解
2019/08/16 Python
python删除指定列或多列单个或多个内容实例
2020/06/28 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
Python 可视化神器Plotly详解
2020/12/26 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
高中生职业规划范文
2014/03/09 职场文书
《画》教学反思
2014/04/14 职场文书
2015年度党员个人总结
2015/02/14 职场文书
电视新闻稿
2015/07/17 职场文书