资讯专栏INFORMATION COLUMN

【重温基础】7.时间对象

YuboonaZhang / 2919人阅读

摘要:本文是重温基础系列文章的第七篇。系列目录复习资料资料整理个人整理重温基础语法和数据类型重温基础流程控制和错误处理重温基础循环和迭代重温基础函数重温基础表达式和运算符重温基础数字本章节复习的是中的时间对象,一些处理的方法。

本文是 重温基础 系列文章的第七篇。
今日感受:做好自律。

系列目录:

【复习资料】ES6/ES7/ES8/ES9资料整理(个人整理)

【重温基础】1.语法和数据类型

【重温基础】2.流程控制和错误处理

【重温基础】3.循环和迭代

【重温基础】4.函数

【重温基础】5.表达式和运算符

【重温基础】6.数字

本章节复习的是JS中的时间对象,一些处理的方法。

前置知识
JavaScript中的时间是以1970年1月1日00:00:00以来的毫秒数来储存数据类型。
Data对象的范围是相对距离UTC1970年1月1日的前后100,000,000天。
创建一个时间对象:

let d = new Date([params]);

参数params可以是:

无参数:默认创建今天的日期和时间。

一个符合以下格式的表示日期的字符串:

"月 日, 年 时:分:秒."或者"年月日 时分秒"

let d = new Date("2018-12-20");

如果你省略时、分、秒,那么他们的值将被设置为0。

一个年,月,日的整型值的集合:

let d = new Date(2018, 12, 20);

一个年,月,日,时,分,秒的集合:

let d = new Date(2018, 12, 20, 23, 20, 10);

这里Date对象涉及到的方法特别多,请移步W3school JavaScript Date 对象

1.Date对象的方法

常用处理的方法有以下几类:

"set":用于设置Date对象的日期和时间的值。

"get":用去获取Date对象的日期和时间的值。

"to":用于返回Date对象的字符串格式的值。

"parseUTC":用于解析Date字符串。

需要注意的Date对象的一些数值问题:

秒/分: 0 - 59;

时: 0 - 23;

星期: 0(周日) - 6(周六)

日期: 1 - 31

月份: 0(一月) - 11(十二月)

年份: 从1900开始的年数

例如:

let d = new Date("2018-12-10");
let d1 = d.getMonth();    // 11
let d2 = d.getFullYear(); // 2018

获取今年剩下的天数:

let d = new Date();
let e = new Date(2018, 11, 31, 23, 59, 59, 999);  // 设置年月日时分秒
e.setFullYear(d.getFullYear); // 设置为今年
let m = 24 * 60 * 60 * 1000;  // 每日毫秒数
let result = (e.getTime() - d.getTime()) / m;
result = Math.round(result);  // 返回今年剩余天数

这里Date对象涉及到的方法特别多,请移步W3school JavaScript Date 对象

注意:

格林尼治标准时间(GMT)英国、爱尔兰、冰岛和葡萄牙属于该时区。这个时区与中国北京时间的时差是8个小时,也就是说比北京时间晚8个小时。
2.使用Date对象 2.1 设置日期

为一个时间对象设置指定日期(2018年12月20日),注意这里:和前面说的一样,12月在JS的Date对象中,是用11表示。

let d = new Date();
d.setFullYear(2018,11,20);

设置时间对象10天以后:

let d = new Date();
d.setDate(d.getDate() + 10); // 先获取当天的日期,再设置到指定天数以后
2.2 比较时间

通常情况下,像下面这样简单比较:

let d = new Date();
let e = new Date();
d.setFullYear(2018,10,10);
let r = d > e ? "good" : "nice" ; // nice

还可以比较两个日期相差多少天:

let d1 = new Date("2018-10-10");
let d2 = new Date("2018-11-11");
let d3 = (d2 - d1) / (1000 * 60 * 60 * 24);  // 32
2.3 计算N天后星期几
function d (num){
    if(typeof Number(num) === "number"){
        let d1 = new Date();
        let d2 = d1.setDate(d1.getDate() + Number(num));
        let n = new Date(d2).getDay();
        let s = "";
        switch (n){
            case 0 : 
                s = "星期天";
                break;
            case 1 : 
                s = "星期一";
                break;
            case 2 : 
                s = "星期二";
                break;
            case 3 : 
                s = "星期三";
                break;
            case 4 : 
                s = "星期四";
                break;
            case 5 : 
                s = "星期五";
                break;
            case 6 : 
                s = "星期六";
                break;
        }
        return s;
    }else {
        alert("请输入正确数字!");
    }
}
2.4 格式化日期

常见的日期格式化为字符串的方法有这些:

toDateString()——以特定于实现的格式显示星期几、月、日和年;

toTimeString()——以特定于实现的格式显示时、分、秒和时区;

toLocaleDateString()——以特定与地区的格式显示星期几、月、日和年;

toLocaleTimeString()——以特定于实现的格式显示时、分、秒;

toUTCString()——以特定于实现的格式完整的UTC日期。

获取并格式化日期:年-月-日

function d (date){
    return date.getFullYear() + "-" + (date.getMonth() + 1) + "-" + date.getDate();
}
d(new Date()); // "2018-12-20"

日期字符串转为 年-月-日

function d (str){
    return new Date(Date.parse(str.replace(/-/g, "/")));
    // 或者
    // return new Date(str.replace(/-/g, "/"));
}

获取当前星期几

let d = "今天是星期" + "日一二三四五六".charat(new Date().getDay());
2.5 获取某年某月的天数

这里有个小技巧,若给new Date()传入一个如aaaa/aa/0参数时,可以得到aa月的前一个月的最后一天,如传入2018/12/0会得到2018/11/30

值得注意的是: 在Chrome浏览器上并不支持,会返回Invalid Date导致结果为NaN,但是我们可以使用aaaa,aa,0形式作为参数,下面分别写出这两种:

// aaaa/aa/0形式 只要传入年和月 
function d (y, m){
    m = parseInt(m, 10) + 1;
    let r = new Date(y + "/" + m + "/0");
    return r.getDate();
}

// aaaa,aa,0形式 只要传入年和月 
function d (y, m){
    m = parseInt(m, 10) + 1;
    let r = new Date(y, m, 0);
    return r.getDate();
}
2.6 获取上个月/下个月日期("yyyy-mm-dd")

传入参数的格式"yyyy-mm-dd",其实也可以是Date()对象,大家可以自行尝试。

// 上个月 date格式"yyyy-mm-dd"
function my_date (date){
    let arr = date.split("-");
    let y = arr[0] , m = arr[1], d = arr[2];  // 获取当前的年月日
    // ES6语法 let [y,m,d] = arr;
    let day = new Date(y,m,0);
    day = day.getDate(); // 获取当前月份的天数

    let y2 = y, m2 = parseInt(m) - 1;
    if(m2 == 0){
        y2 = parseInt(y2) -1;
        m2 = 12;
    }

    let d2 = d, day2 = new Date(y2, m2, 0);
    day2 = day2.getDate();
    if(d2 > day2){
        d2 = day2;
    }
    if(m2 < 10){
        m2 = "0" + m2;
    }

    return y2 + "-" + m2 + "-" + d2;
}
my_date("2018-1-20");  //"2017-12-20"

下个月的计算方法也是相似:

// 上个月 date格式"yyyy-mm-dd"
function my_date (date){
    let arr = date.split("-");
    let y = arr[0] , m = arr[1], d = arr[2];  // 获取当前的年月日
    let day = new Date(y,m,0);
    day = day.getDate(); // 获取当前月份的天数

    // 和计算上个月的区别   
    let y2 = y, m2 = parseInt(m) + 1;
    if(m2 == 13){   
        y2 = parseInt(y2) + 1;
        m2 = 1;
    }

    let d2 = d, day2 = new Date(y2, m2, 0);
    day2 = day2.getDate();
    if(d2 > day2){
        d2 = day2;
    }
    if(m2 < 10){
        m2 = "0" + m2;
    }

    return y2 + "-" + m2 + "-" + d2;
}
my_date("2018-12-20");  // "2019-01-20"
参考资料

1.MDN 数字和日期
2. JS日期Date详解与实例扩展

本部分内容到这结束

Author 王平安
E-mail pingan8787@qq.com
博 客 www.pingan8787.com
微 信 pingan8787
每日文章推荐 https://github.com/pingan8787...
JS小册 js.pingan8787.com

欢迎关注微信公众号【前端自习课】每天早晨,与您一起学习一篇优秀的前端技术博文 .

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100267.html

相关文章

  • 重温基础】11.Map和Set对象

    摘要:本文是重温基础系列文章的第十一篇。返回一个布尔值,表示该值是否为的成员。使用回调函数遍历每个成员。与数组相同,对每个成员执行操作,且无返回值。 本文是 重温基础 系列文章的第十一篇。 今日感受:注意身体,生病花钱又难受。 系列目录: 【复习资料】ES6/ES7/ES8/ES9资料整理(个人整理) 【重温基础】1.语法和数据类型 【重温基础】2.流程控制和错误处理 【重温基础】3....

    meteor199 评论0 收藏0
  • 重温基础】14.元编程

    摘要:本文是重温基础系列文章的第十四篇。元,是指程序本身。有理解不到位,还请指点,具体详细的介绍,可以查看维基百科元编程。拦截,返回一个布尔值。 本文是 重温基础 系列文章的第十四篇。 这是第一个基础系列的最后一篇,后面会开始复习一些中级的知识了,欢迎持续关注呀! 接下来会统一整理到我的【Cute-JavaScript】的JavaScript基础系列中。 今日感受:独乐乐不如众乐乐...

    cc17 评论0 收藏0
  • 重温基础】12.使用对象

    摘要:本文是重温基础系列文章的第十二篇。注意对象的名称,对大小写敏感。基础用法第一个参数是目标对象,后面参数都是源对象。用途遍历对象属性。用途将对象转为真正的结构。使用场景取出参数对象所有可遍历属性,拷贝到当前对象中。类似方法合并两个对象。 本文是 重温基础 系列文章的第十二篇。 今日感受:需要总结下2018。 这几天,重重的感冒发烧,在家休息好几天,伤···。 系列目录: 【复习资料...

    garfileo 评论0 收藏0
  • 重温基础】15.JS对象介绍

    摘要:构造函数通常首字母大写,用于区分普通函数。这种关系常被称为原型链,它解释了为何一个对象会拥有定义在其他对象中的属性和方法。中所有的对象,都有一个属性,指向实例对象的构造函数原型由于是个非标准属性,因此只有和两个浏览器支持,标准方法是。 从这篇文章开始,复习 MDN 中级教程 的内容了,在初级教程中,我和大家分享了一些比较简单基础的知识点,并放在我的 【Cute-JavaScript】系...

    booster 评论0 收藏0
  • 重温基础】8.字符串

    摘要:字符串拓展在我们判断字符串是否包含另一个字符串时,之前,我们只有方法,之后我们又多了三种方法返回布尔值,表示是否找到参数字符串。返回布尔值,表示参数字符串是否在原字符串的头部。 本文是 重温基础 系列文章的第八篇。今日感受:人在异乡,也不能忘记汤圆。 系列目录: 【复习资料】ES6/ES7/ES8/ES9资料整理(个人整理) 【重温基础】1.语法和数据类型 【重温基础】2.流程控制和...

    Batkid 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<