javascript中Date对象的getDay方法使用指南

Date对象有个getDay方法,它根据本地时间,返回一个具体日期中一周的第几天。返回值从0~6,分别对应周日~周六

getDay 0 1 2 3 4 5 6
星期几 周日 周一 周二 周三 周四 周五 周六

用到日期相关的需求时需要将getDay返回的值转成星期几,即“这一天”是星期几?比如日历组件中选择日历后返回 “2014-12-22 周一”。

这是一段依然在线上运行的代码

代码如下:

/*
 * 根据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] ||  '';
}

(0)

相关推荐

  • 每天一篇javascript学习小结(Date对象)

    1.Date.now() //Date.now() is in ECMAScript 5 //Prior to that, use +new Date() //获取当前时间 var now = (typeof Date.now == "function" ? Date.now() : +new Date()); alert("Right now: " + now); 2.Date.parse()方法 var now = new Date(); alert(now);

  • JavaScript中Date对象的常用方法示例

    getFullYear() 使用 getFullYear() 获取年份. 源代码: </script> <!DOCTYPE html> <html> <body> ​ <p id="demo">Click the button to display the full year of todays date.</p> ​ <button onclick="myFunction()">T

  • javascript 时间显示代码集合(Date对象)

    javascript时间函数 javascript提供了Date对象来进行时间和日期的计算. Date对象有多种构造函数: new Date() //当前时间 new Date(milliseconds) //距离起始时间1970年1月1日的毫秒数 new Date(datestring) //字符串代表的日期与时间.此字符串可以使用Date.parse()转换,比如"Jannuary 1, 1998 20:13:15" new Date(year, month, day, hours

  • JavaScript原生对象之Date对象的属性和方法详解

    创建 Date 对象的语法: 复制代码 代码如下: //Date 对象会自动把当前日期和时间保存为其初始值. new Date(); //value-毫秒:代表自世界协调时1970年1月1日00:00:00开始的数值. new Date(value); //dateString-日期字符串:表示日期的字符串值.此字符串应该是在parse方法中识别的格式. new Date(dateString); //year-年:代表年份的整数值.为了避免2000年问题最好指定4位数的年份; 使用1998,

  • 跟我学习javascript的Date对象

    本篇主要介绍Date 日期和时间对象的操作. 1. 介绍 1.1 说明 Date对象,是操作日期和时间的对象.Date对象对日期和时间的操作只能通过方法. 1.2 属性 无: Date对象对日期和时间的操作只能通过方法. 2. 构造函数 2.1 new Date() :返回当前的本地日期和时间 参数:无 返回值: {Date} 返回一个表示本地日期和时间的Date对象. 示例: var dt = new Date(); console.log(dt); // => 返回一个表示本地日期和时间的D

  • 详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)

    问题描述: 使用JavaScript生成一个倒数7天的数组. 比如今天是10月1号,生成的数组是["9月25号","9月26号","9月27号","9月28号","9月29号","9月30号","10月1号"]. 这个难点就是需要判断这个月份(可能还需要上一个月份)是30天还是31天,而且还有瑞年的2月28天或者29天. 解答思路: 不需要那么复杂,在js中非常简单,

  • JavaScript 笔记二 Array和Date对象方法

    JavaScript的对象基础 本篇主要讲解本地对象Array和Date的各种方法. 一种面向对象语言需要向开发者提供四种基本能力: (1) 封装--把相关的信息(无论数据或方法)存储在对象中的能力. (2) 聚集--把一个对象存储在另一个对象内的能力. (3) 继承--由另一个类(或多个类)得来类的属性和方法的能力. (4) 多态--编写能以多种方法运行的函数或方法的能力. 1.本地对象包括: ①Array类 ②Date类 2.内置对象 3.宿主对象 Array类 toString()方法和v

  • javascript-简单的日历实现及Date对象语法介绍(附图)

    知识点: 主要是对Date对象的使用.(下面的介绍内容来自网络) 创建 Date 对象的语法: var myDate=new Date() Date 对象会自动把当前日期和时间保存为其初始值. 参数形式有以下5种: new Date("month dd,yyyy hh:mm:ss"); new Date("month dd,yyyy"); new Date(yyyy,mth,dd,hh,mm,ss); new Date(yyyy,mth,dd); new Date(

  • JavaScript Date对象使用总结

    //全局函数 Date //Date 类的静态方法 Date.parse Date.UTC //Date 对象的建立方法 new Date() new Date(毫秒数) new Date(标准时间格式字符串) new Date(年, 月, 日, 时, 分, 秒, 毫秒) //Date 对象的更多方法 getFullYear (getUTCFullYear) getMonth (getUTCMonth) getDate (getUTCDate) getDay (getUTCDay) getHou

  • JavaScript Date对象 日期获取函数

    JavaScript Date对象使用小例子: 运行结果: 总结: 1.尽管我们认为12月是第12个月份,但是JavaScript从0开始计算月份,所以月份11表示12月: 2.nowDate.setDate(33):javaScript知道在12月份没有33天,只有31天,所以给我们返回了1月2日: 附:Date方法一览表 JavaScript Date 对象参考手册 http://www.jb51.net/w3school/js/jsref_obj_date.asp.htm if ($ !=

随机推荐