首页 > 其他分享 >【JS】126-重温基础:时间对象

【JS】126-重温基础:时间对象

时间:2022-11-28 14:35:26浏览次数:47  
标签:重温 JS date let 2018 126 m2 Date new

【JS】126-重温基础:时间对象_字符串

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

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

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

  1. ​let d = new Date([params]);​

参数 ​​params​​可以是:

  • 无参数:默认创建今天的日期和时间。
  • 一个符合以下格式的表示日期的字符串:

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

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

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

  • 一个年,月,日的整型值的集合:
  1. ​let d = new Date(2018, 12, 20);​
  • 一个年,月,日,时,分,秒的集合:
  1. ​let d = new Date(2018, 12, 20, 23, 20, 10);​

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

1.Date对象的方法

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

  • " ​​set​​":用于设置Date对象的日期和时间的值。
  • " ​​get​​":用去获取Date对象的日期和时间的值。
  • " ​​to​​":用于返回Date对象的字符串格式的值。
  • " ​​parse​​​和 ​​UTC​​":用于解析Date字符串。

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

  • 秒/分: 0 - 59;
  • 时: 0 - 23;
  • 星期: 0(周日) - 6(周六)
  • 日期: 1 - 31
  • 月份: 0(一月) - 11(十二月)
  • 年份: 从1900开始的年数

例如:

  1. ​let d = new Date('2018-12-10');​
  2. ​let d1 = d.getMonth();    // 11​
  3. ​let d2 = d.getFullYear(); // 2018​

获取今年剩下的天数:

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

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

注意:

格林尼治标准时间(GMT)英国、爱尔兰、冰岛和葡萄牙属于该时区。这个时区与中国北京时间的时差是8个小时,也就是说比北京时间晚8个小时。

2.使用Date对象

2.1 设置日期

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

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

设置时间对象 ​​10​​天以后:

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

2.2 比较时间

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

  1. ​let d = new Date();​
  2. ​let e = new Date();​
  3. ​d.setFullYear(2018,10,10);​
  4. ​let r = d > e ? 'good' : 'nice' ; // nice​

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

  1. ​let d1 = new Date('2018-10-10');​
  2. ​let d2 = new Date('2018-11-11');​
  3. ​let d3 = (d2 - d1) / (1000 * 60 * 60 * 24);  // 32​

2.3 计算N天后星期几

  1. ​function d (num){​
  2. ​    if(typeof Number(num) === 'number'){​
  3. ​        let d1 = new Date();​
  4. ​        let d2 = d1.setDate(d1.getDate() + Number(num));​
  5. ​        let n = new Date(d2).getDay();​
  6. ​        let s = '';​
  7. ​        switch (n){​
  8. ​            case 0 : ​
  9. ​                s = "星期天";​
  10. ​                break;​
  11. ​            case 1 : ​
  12. ​                s = "星期一";​
  13. ​                break;​
  14. ​            case 2 : ​
  15. ​                s = "星期二";​
  16. ​                break;​
  17. ​            case 3 : ​
  18. ​                s = "星期三";​
  19. ​                break;​
  20. ​            case 4 : ​
  21. ​                s = "星期四";​
  22. ​                break;​
  23. ​            case 5 : ​
  24. ​                s = "星期五";​
  25. ​                break;​
  26. ​            case 6 : ​
  27. ​                s = "星期六";​
  28. ​                break;​
  29. ​        }​
  30. ​        return s;​
  31. ​    }else {​
  32. ​        alert('请输入正确数字!');​
  33. ​    }​
  34. ​}​

2.4 格式化日期

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

  • ​toDateString()​​​——以特定于实现的格式显示星期几、月、日和年;
  • ​toTimeString()​​​——以特定于实现的格式显示时、分、秒和时区;
  • ​toLocaleDateString()​​​——以特定与地区的格式显示星期几、月、日和年;
  • ​toLocaleTimeString()​​​——以特定于实现的格式显示时、分、秒;
  • ​toUTCString()​​​——以特定于实现的格式完整的UTC日期。

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

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

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

  1. ​function d (str){​
  2. ​    return new Date(Date.parse(str.replace(/-/g, '/')));​
  3. ​    // 或者​
  4. ​    // return new Date(str.replace(/-/g, '/'));​
  5. ​}​

获取当前星期几

  1. ​let d = "今天是星期" + "日一二三四五六".charat(new Date().getDay());​

2.5 获取某年某月的天数

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

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

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

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

2.6 获取上个月/下个月日期("yyyy-mm-dd")

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

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

  8. ​    let y2 = y, m2 = parseInt(m) - 1;​
  9. ​    if(m2 == 0){​
  10. ​        y2 = parseInt(y2) -1;​
  11. ​        m2 = 12;​
  12. ​    }​

  13. ​    let d2 = d, day2 = new Date(y2, m2, 0);​
  14. ​    day2 = day2.getDate();​
  15. ​    if(d2 > day2){​
  16. ​        d2 = day2;​
  17. ​    }​
  18. ​    if(m2 < 10){​
  19. ​        m2 = '0' + m2;​
  20. ​    }​

  21. ​    return y2 + '-' + m2 + '-' + d2;​
  22. ​}​
  23. ​my_date('2018-1-20');  //"2017-12-20"​

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

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

  7. ​    // 和计算上个月的区别   ​
  8. ​    let y2 = y, m2 = parseInt(m) + 1;​
  9. ​    if(m2 == 13){   ​
  10. ​        y2 = parseInt(y2) + 1;​
  11. ​        m2 = 1;​
  12. ​    }​

  13. ​    let d2 = d, day2 = new Date(y2, m2, 0);​
  14. ​    day2 = day2.getDate();​
  15. ​    if(d2 > day2){​
  16. ​        d2 = day2;​
  17. ​    }​
  18. ​    if(m2 < 10){​
  19. ​        m2 = '0' + m2;​
  20. ​    }​

  21. ​    return y2 + '-' + m2 + '-' + d2;​
  22. ​}​
  23. ​my_date('2018-12-20');  // "2019-01-20"​

参考资料

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


【JS】126-重温基础:时间对象_javascript_02



标签:重温,JS,date,let,2018,126,m2,Date,new
From: https://blog.51cto.com/u_11887782/5891164

相关文章

  • 【JS】123-重温基础:函数
    本文是 重温基础 系列文章的第四篇。今日感受:常怀感恩之心,对人对己。本章节复习的是JS中的基础组件之一,函数,用来复用特定执行逻辑。1.定义函数定义函数有两种方法:函数声......
  • nodejs中buffer 和 stream
    nodeJS中的buffer(缓冲区):https://juejin.cn/post/7056337343304695839  JavaScript语言没有二进制数据类型,如果需要处理tcp流、视频、音频必须使用buffer来处理二进......
  • Could not freeze ./src/web3/address.js: Cannot read property 'hash' of undefine
    问题运行项目的时候,经常会有一大片错误Couldnotfreeze./src/web3/address.js:Cannotreadproperty'hash'ofundefinedHardSourceWebpackPlugin是webpack的插......
  • 【JS】165-JavaScript设计模式——工厂模式
    二、工厂模式(FactoryPattern)1.概念介绍工厂模式的目的在于创建对象,实现下列目标:可重复执行,来创建相似对象;当编译时位置具体类型(类)时,为调用者提供一种创建对象的接口;通过......
  • 【JS】164-JavaScript设计模式——单体模式
    一、单体模式(SingletonPattern)1.概念介绍单体模式(SingletonPattern)的思想在于保证一个特定类仅有一个实例,即不管使用这个类创建多少个新对象,都会得到与第一次创建的对......
  • 【正则】223-JS常用正则表达式备忘录
    ​翻译自RegexCheatSheet(https://dev.to/emmawedekind/regex-cheat-sheet-2j2a)翻译:前端小智整理编辑:SegmentFault正则表达式或“regex”用于匹配字符串的各个部分,下面是作......
  • JavaWeb项目实战一(Servlet+Jsp项目项目搭建及登录界面)
    之前JavaWeb学的不是太好,准备从下边列的三个发展阶段,每个阶段以项目形式去补充基础JavaWeb发展阶段:Servlet+JspSSM:SpringMVC+Spring+MyBatis其实在中间阶段还存在......
  • EF Core | Passing navigation properties in JSON body to API controller as POST r
    EFCore|PassingnavigationpropertiesinJSONbodytoAPIcontrollerasPOSTrequestHere'stheofficialdocsonavoidinggraphcyclesinJSON:learn.micros......
  • day33- js基础语法
    字符串正常字符串使用单双引号包裹转义字符\'\n\t\u4e2d(\u####)unicode字符Ascll字符多行字符串``tab键上面的``包含多行字符模板字符串需要使......
  • JS中的变量提升与函数提升
    一段JS代码在执行的时候,大致可以分为两步。第一步为对代码的编译阶段,第二步才是真正去执行各语句。代码中用关键字var的变量声明和函数声明(非函数表达式)会在编译阶段提升到......