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 相关文章推荐
SinaEditor使用方法详解
Dec 28 Javascript
window.location.href的用法(动态输出跳转)
Aug 09 Javascript
jQuery弹出框代码封装DialogHelper
Jan 30 Javascript
Javascript URI 解析介绍
Mar 15 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
Jan 04 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
Apr 24 Javascript
BootStrap 导航条实例代码
May 18 Javascript
关于jQuery库冲突的完美解决办法
May 20 jQuery
vue.js学习之vue-cli定制脚手架详解
Jul 02 Javascript
JS实现可针对算术表达式求值的计算器功能示例
Sep 04 Javascript
vue router 通过路由来实现切换头部标题功能
Apr 24 Javascript
vue的keep-alive用法技巧
Aug 15 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无敌近乎加密方式!
2010/07/17 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
2011/06/13 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
php操作redis命令及代码实例大全
2020/11/19 PHP
动态加载js的几种方法
2006/10/23 Javascript
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
Vue.js组件使用开发实例教程
2016/11/01 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
2016/11/22 Javascript
jquery实现手机端单店铺购物车结算删除功能
2017/02/22 Javascript
Bootstrap3多级下拉菜单
2017/02/24 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
[01:13]这,就是刀塔
2014/07/16 DOTA
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
用Python编写一个基于终端的实现翻译的脚本
2015/04/24 Python
python操作sqlite的CRUD实例分析
2015/05/08 Python
基于python实现百度翻译功能
2019/05/09 Python
python 安装impala包步骤
2020/03/28 Python
Python排序函数的使用方法详解
2020/12/11 Python
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
linux面试题参考答案(5)
2014/09/01 面试题
幼儿园教研活动方案
2014/01/19 职场文书
法制宣传教育方案
2014/05/09 职场文书
奥巴马开学演讲稿
2014/05/15 职场文书
欢迎家长标语
2014/10/08 职场文书
广告业务员岗位职责
2015/02/13 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
小学入学感言
2015/08/01 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js