【重温基本】7.时候对象

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

系列目次:

本章节温习的是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-mailpingan8787@qq.com
博 客www.pingan8787.com
微 信pingan8787
逐日文章引荐https://github.com/pingan8787…
JS小册js.pingan8787.com

迎接关注微信民众号【前端自习课】天天清晨,与您一同进修一篇优异的前端手艺博文 .

    原文作者:pingan8787
    原文地址: https://segmentfault.com/a/1190000017464867
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞