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

栏目: JavaScript · 发布时间: 5年前

内容简介:本文是系列目录:前置知识:

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

系列目录:

本章节复习的是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"
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

顾客要买什么

顾客要买什么

[美]迈克尔·西尔 / 方海萍 / 中国人民大学出版社 / 2006-10 / 38.00元

《顾客要买什么》告诉我们全球的中产阶级如何正在改造着消费品市场:对低价的产品和服务进行趋低消费,对于高端的产品和服务要趋优消费,而对于日趋乏味、价值降低的中档商品则避而远之。这些消费者大多是女性,教育程度高,可支配收入多,买东西的时候也更会精打细算。她们选购、使用商品和服务的时候都是有目的的,有一种大权在握的感觉。消费对她们来说并不是非做不可的麻烦事,也不是什么无法避免的琐事,而是如何明智地花钱的......一起来看看 《顾客要买什么》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具