Date对象是js语言中内置的数据类型,用于提供日期与时间的相关操作。学习它之前我们先了解一下什么是GMT,什么时UTC等相关的知识。

  GMT: 格林尼治标准时间(Greenwich Mean Time,GMT)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。 理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。 地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用.

  UTC:UTC是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。又称协调世界时、世界统一时间、世界标准时间、国际协调时间。UTC才是目前应用的真正的精准的标准时间。

  日期时间完整格式:YYYY-MM-DDTHH:mm:ss.sssZ

  闰年:年分为闰年(366天)和平年(365)天。闰年的定义是可以被4整除且不可被100整除,四年一闰,百年不闰,四百年再闰。

  时分秒:1天=24时=24*60(1440)分=24*60*60(86400)秒=86400000毫秒。

  下面先来看Date对象的三个静态方法:Date.now(), Date.parse(), Date.UTC().它们不通过Date实例对象而是通过Date()构造函数本身调用。

  Date.now():返回自1970-11 00:00:00 UTC到当前时间的毫秒数(返回的是Number类型)。它不支持传递参数。

  Date.parse():解析一个表示某个日期的字符串,并返回从1970-1-1 00:00:00 UTC 到该日期对象(该日期对象的UTC时间)的毫秒数,如果该字符串无法识别,或者一些情况下,包含了不合法的日期数值,则返回值为NaN。

  Date.UTC():返回给定日期的毫秒数,但其参数并不是一个字符串,而是分别代表年、月、日、时、分、秒、毫秒的数字参数

  1. <script>
  2. console.log(Date.now()); //1574838090727
  3. console.log(Date.parse('6/11/2019')); //1560182400000
  4. console.log(Date.parse('2015-02-31'));//1425340800000
  5. console.log(Date.parse('January 12,2004'));//1073836800000
  6. console.log(Date.parse()); //NaN
  7. console.log(Date.UTC.length); //7
  8. console.log(Date.UTC(2019, 11, 27, 00, 00, 00)); //1577404800000
  9. </script>

  创建日期对象

    new Date()       创建一个跟日期有关系的对象

    new Date()  可以接收参数      

      当没有参数时,它是以本机的时间做为参考,创建一个日期对象;

      new Date(年,月,日,时,分,秒)参数是数字,每个参数用逗号隔开,注意参数是可以省略的,省略的部分会取一个默认值0(日期的默认值为1);

      new Date('june 10,2019 12:12:12')参数是字符串,外国人常用;

      new Date(时间戳) 参数是时间戳,时间戳是从1970年1月1日0时0分0秒到指定一个时间点之间的毫秒数

        new.Date().getTime()注意:拿到的date对象只是本机的时间,修改的是date对象的日期,而不是本机的日期,本机的日期只能获取不能修改。

  1. <script>
  2. var d1 = new Date();
  3. console.log(d1); //Wed Nov 27 2019 15:55:23 GMT+0800 (中国标准时间)
  4.  
  5. var d2 = new Date(2019, 03);
  6. console.log(d2); //Mon Apr 01 2019 00:00:00 GMT+0800 (中国标准时间)
  7.  
  8. var d3 = new Date('june 10,2019 12:12:12');
  9. console.log(d3); //Mon Jun 10 2019 12:12:12 GMT+0800 (中国标准时间)
  10.  
  11. var d4 = new Date(new Date().getTime());
  12. console.log(d4); //Wed Nov 27 2019 16:01:19 GMT+0800 (中国标准时间)
  13. </script>

    Date对象没有可以直接读写的属性,所有对日期和时间的访问都是需要通过方法。Date对象的大多数方法分为两种形式:一种是使用本地时间,一种是使用UTC时间。如下:

  to类:方法从Date对象返回一个字符串,表示指定的时间(9个)

    日期对象.toString():返回本地时区的日期字符串

    日期对象.toUTCString(): 返回UTC时间的日期字符串

    日期对象.toISOString(): 返回Date对象的标准的日期时间字符串格式的字符串

    日期对象.toDateString(): 返回Date对象的日期部分的字符串

    日期对象.toJSON():返回一个符合JSON格式的日期字符串,与toISOString方法的返回结果完全相同

    日期对象.toTimeString(): 返回Date对象的时间部分的字符串

    日期对象.toLocaleDateString():  toDateString()方法的本地化转换

    日期对象.toLocaleString(): toString()方法的本地化转换

    日期对象.toLocaleTimeString(): toTimeString()方法的本地化转换

  1. <script>
  2. console.log(new Date('2019-11-27').toString());   //Wed Nov 27 2019 08:00:00 GMT+0800 (中国标准时间)
  3. console.log(new Date('2019-11-27').toUTCString()); //Wed, 27 Nov 2019 00:00:00 GMT
  4. console.log(new Date('2019-11-27').toISOString()); //2019-11-27T00:00:00.000Z
  5. console.log(new Date('2019-11-27').toDateString()); //Wed Nov 27 2019
  6. console.log(new Date('2019-11-27').toJSON());    //2019-11-27T00:00:00.000Z
  7. console.log(new Date('2019-11-27').toTimeString());      //08:00:00 GMT+0800 (中国标准时间)
  8. console.log(new Date('2019-11-27').toLocaleDateString()); //2019/11/27
  9. console.log(new Date('2019-11-27').toLocaleString());    //2019/11/27 上午8:00:00
  10. console.log(new Date('2019-11-29').toLocaleTimeString()); //上午8:00:00
  11. </script>

  get类:获取日期对象的一些方法

      日期对象.valueOf(): 返回距离1970年1月1日0点的毫秒数(这个方法通常在js内容被调用,而不是在代码中显式调用).

  1. <script>
  2. var d1=new Date('Wed Nov 27 2019');
  3. console.log(d1.valueOf()); //1574784000000
  4. </script>

    日期对象.getFullYear():     获取年

    日期对象.getMonth():     获取月(月份从0开始计算);

    日期对象.getDate():         获取日

    日期对象.getDay():        获取星期(星期从周日开始,从0开始,0为周日);

    日期对象.getHours():     获取小时

    日期对象.getMinutes():       获取分钟

    日期对象.getSeconds():     获取秒钟

    日期对象.getMillSeconds():  获取毫秒

    日期对象.getTime():      获取19070-01-01 00:00:00到目前日期对象的时间差 单位:ms

  例子:数字版时时钟

  1. <div id="dateBox"></div>
  2. <script>
  3. window.onload = function () {
  4. var dateBox = document.getElementById('dateBox');
  5.  
  6. function time() {
  7. var d = new Date();
  8. dateBox.innerHTML = '' + d.getFullYear() + '年'
  9. + format(d.getMonth() + 1) + '月'
  10. + format(d.getDate()) + '号星期'
  11. + formatWeek(d.getDay()) + ''
  12. + format(d.getHours()) + '时'
  13. + format(d.getMinutes()) + '分'
  14. + format(d.getSeconds()) + '秒';
  15. }
  16. function format(v) {
  17. return v < 10 ? '0' + v : '' + v;
  18. }
  19. function formatWeek(v) {
  20. return ['日', '一', '二', '三', '四', '五', '六'][v];
  21. }
  22. setInterval(time, 1000);
  23. }
  24. </script>

  set类:日期对象不仅可以获取还可以对它进行设置,修改的是日期对象的值而不是真正的时间。

    日期对象.setFullYear():     获取年

    日期对象.setMonth():     获取月(月份从0开始计算);

    日期对象.setDate():         获取日

    日期对象.setHours():     获取小时

    日期对象.setMinutes():       获取分钟

    日期对象.setSeconds():     获取秒钟

    日期对象.setMillSeconds():  获取毫秒

    日期对象.setTime():     设置时间戳

    注意:设置日期里没有设置星期,因为设置了年,月,日后就知道是星期几了,星期只能获取不能设置。

  案例1: 这个月有多少天?这个月的第一天是星期几?今天是今年的第几周? 

  1. <script>
  2. //这个月的天数
  3. var d1 = new Date();
  4. d1.setMonth(d1.getMonth() + );
  5. d1.setDate(); //把月份设置成下个月后,把日期设置成0,因为没有0号,所以自动进行回滚到上个月的最后一天
  6. console.log(d1); //Sat Nov 30 2019 10:34:50 GMT+0800 (中国标准时间)
  7.  
  8. //这个月初是周几
  9. var d2 = new Date();
  10. d2.setDate();//把这个参数设为1就会回到这个月的第一天
  11. console.log(d2.getDay()); //5
  12.  
  13. //今天是今年的第几周
  14. var d3 = new Date();
  15. var n = ; //用来存储周数
  16. var firstDay = new Date(, , ).getDay(); //获取今年的第一天是周几
  17. var today = d3.getDay(); //获取今天是周几
  18.  
  19. while (d3.getFullYear() == ) {
  20. n++;
  21. d3.setDate(d3.getDate() - ); //今天的日期对象减7,然后进行重设
  22. }
  23.  
  24. //今天的星期如果比今年的第1天星期要小,那么就会少一周,因为不断减到最后的话会跳到上一年,这时候while的条件就不满足,那n就会少加1次。
          所以会有以下的比较:今天的星期比今年第一天的星期要小,就让n加上一个1
  25. if (today < firstDay) {
  26. n++;
  27. }
  28. console.log(n); //
  29. </script>

  案例2:历史上的今天是周几?

  1. <body>
  2. <script>
  3. window.onload = function () {
  4. var year = document.getElementById('year');
  5. var month = document.getElementById('month');
  6. var day = document.getElementById('day');
  7. var week = document.getElementById('week');
  8. var d = new Date();
  9. var oldDate = new Date();
  10.  
  11. //生成年
  12. var yearStr = '';
  13. for (var i = 2050; i >= 1900; i--) {
  14. yearStr += '<option>' + i + '</option>';
  15. }
  16. year.innerHTML = yearStr;
  17. year.value = d.getFullYear();
  18.  
  19. //生成月
  20. var monthStr = '';
  21. for (var i = 12; i >= 1; i--) {
  22. monthStr += '<option>' + i + '</option>';
  23. }
  24. month.innerHTML=monthStr;
  25. month.value = d.getMonth() + 1;
  26.  
  27. //生成日
  28. createDay();
  29. function createDay() {
  30. //现在需要根据用户选择的年份,月份去设置日期,设置完日期后,那个月的天数就有了
  31. d.setFullYear(year.value);//框中年份
  32. d.setMonth(month.value);//框中月份
  33. d.setDate(0);
  34. var totalDay = d.getDate();//代表这个月的最后一天,要根据这个来生成日
  35.  
  36. var dayStr = '';
  37. for (var i = 1; i <= totalDay; i++) {
  38. dayStr += '<option>' + i + '</option>'
  39. }
  40. day.innerHTML = dayStr;
  41. day.value = oldDate.getDate();//这个地方要的是最开始的d
  42.  
  43. //星期的变化放在下面
  44. d.setDate(day.value);//设置今天的日期
  45. week.innerHTML = formatWeek(d.getDay());
  46. console.log(d);
  47. }
  48. function formatWeek(v) {
  49. return ['日', '一', '二', '三', '四', '五', '六'][v];
  50. }
  51.  
  52. //调用
  53. year.onchange = function () {
  54. createDay();
  55. }
  56. month.onchange = function () {
  57. createDay();
  58. }
  59. day.onchange = function () {
  60. d.setFullYear(year.value);
  61. d.setMonth(month.value - 1);
  62. d.setDate(this.value);
  63.  
  64. week.innerHTML = formatWeek(d.getDay());
  65. }
  66. }
  67. </script>
  68. <select name="" id="year"></select>
  69. <select name="" id="month"></select>
  70. <select name="" id="day"></select>
  71. 星期<span id="week"></span>
  72. </body>

  案例3:倒计时

  1. <body>
  2. <script>
  3. function cutDown(target) {
  4. //获取当前的时间
  5. var currentDate = new Date();
  6. var v = Math.abs(target - currentDate); //传进来的时间与现在的时间之间的差(毫秒数)
  7.  
  8. //把毫秒转成对应的天、时、分、秒
  9. return {
  10. d: parseInt(v / (24 * 3600000)),
  11. h: parseInt(v % (24 * 3600000) / 3600000),
  12. m: parseInt(v % (24 * 3600000) % 3600000 / 60000),
  13. s: parseInt(v % (24 * 3600000) % 3600000 % 60000 / 1000)
  14. };
  15. }
  16. window.onload = function () {
  17. var d1 = document.getElementById("d1");
  18. var d2 = document.getElementById("d2");
  19.  
  20. var target1 = new Date(2020, 0, 1);
  21. var target2 = new Date(2019, 0, 1);
  22.  
  23. setInterval(function () {
  24. d1.innerHTML = '离2020年1月1号还有' + cutDown(target1).d + '天' + cutDown(target1).h + '时'
                         + cutDown(target1).m + '分' + cutDown(target1).s + '秒';
  25.  
  26. d2.innerHTML = '2019年1月1号已经过了' + cutDown(target2).d + '天' + cutDown(target2).h + '时'
                        + cutDown(target2).m + '分' + cutDown(target2).s + '秒';
  27. }, 1000);
  28. }
  29.  
  30. </script>
  31.  
  32. <div id="d1"></div>
  33. <div id="d2"></div>
  34. </body>

js之数据类型(对象类型——构造器对象——日期)的更多相关文章

  1. js之数据类型(对象类型——构造器对象——对象)

    JavaScript中除了原始类型,null,undefined之外就是对象了,对象是属性的集合,每个属性都是由键值对(值可以是原始值,比如说是数字,字符串,也可以是对象)构成的.对象又可分为构造器对 ...

  2. js之数据类型(对象类型——构造器对象——函数1)

    函数它只定义一次,但可能被多次的执行和调用.JavaScript函数是参数化的,函数的定义会包括形参和实参.形参相当于函数中定义的变量,实参是在运行函数调用时传入的参数. 一.函数定义 函数使用fun ...

  3. js之数据类型(对象类型——构造器对象——正则)

    正则(regular expression)描述了一种字符串的匹配式.一般应用在一些方法中,用一些特殊的符号去代表一些特定的内容,对字符串中的信息实现查找,替换,和提取的操作.js中的正则表达式用Re ...

  4. js之数据类型(对象类型——构造器对象——数组2)

    一.数组空位与undefined 数组空位:数组的某一个位置没有任何值 产生空位的原因:数组中两个逗号之间不放任何值:用new Array()的方法,参数里是个数字:通过一个不存在的下标去增加数组:增 ...

  5. js之数据类型(对象类型——构造器对象——数组1)

    数组是值的有序集合,每个值叫做一个元素,而每一个元素在数组中有一个位置,以数字表示,称为索引.JavaScript数组是无类型的,数组元素可以是任意类型且同一个数组中不同元素也可能有不同的类型.数组的 ...

  6. JS基础知识点——原始类型和对象类型的区别

    1.js类型 1.1 JavaScript语言规定了7种语言类型,他们分别是: Number(数字) Boolean(布尔值) String(字符串) Null (空) Undefined (未定义) ...

  7. js 对象类型 (对象的属性 ,对象的方法) this 关键字

    $(function () { var observation = { init: function () { this.render();//断点:this bind :function() che ...

  8. js常用数据类型(Number,String,undefined,boolean) 引用类型( function,object,null ),其他数据类型( 数组Array,时间Date,正则RegExp ),数组与对象的使用

    js常用数据类型 数字类型 | 字符串类型 | 未定义类型 | 布尔类型 typeof()函数查看变量类型 数字类型  Number var a1 = 10; var a2 = 3.66; conso ...

  9. JS基础:基于原型的对象系统

    简介: 仅从设计模式的角度讲,如果我们想要创建一个对象,一种方法是先指定它的类型,然后通过这个类来创建对象,例如传统的面向对象编程语言 "C++"."Java" ...

随机推荐

  1. MySQL 创建删除和选择数据库

    使用 create 命令创建数据库,语法如下: CREATE DATABASE 数据库名; 删除数据库 drop database <数据库名>; 选择数据库 use 数据库名 Datab ...

  2. C之指针的加法

    #include<stdio.h> #include<stdlib.h> main() { //char arr [] = {'H','e','l','l','o'}; int ...

  3. C之枚举

    #include<stdio.h>#include<stdlib.h>enum WeekDay{ Monday,Tuesday,Wednesday,Thursday,Frida ...

  4. 安装mysql数据库及问题解决方法

    1.mysql官网下载安装包,官网地址:www.mysql.com [root@seiang software]# ll total 580020 -rw-r--r--. 1 root root 59 ...

  5. c# 线程异步处理

    public class AsyncHelper { private static readonly TaskFactory _myTaskFactory = new TaskFactory(Canc ...

  6. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_20-页面静态化-静态化测试-填写页面DataUrl

    启动前端和后端.轮播图的数据url可以在这里修改. 找到列表页面的轮播图,然后点击编辑 随便更新一个地址测试 提交后数据再次编辑 发现url没有变化 在pageService里面update方法把更新 ...

  7. java 枚举和数值的相互转换

    枚举简介 enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中 在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而 ...

  8. zip炸弹

    故障系统有人提了zip炸弹的故障,了解了一些关于zip炸弹的常识. 42.zip 是很有名的zip炸弹.一个42KB的文件,解压完其实是个4.5PB的“炸弹”. 更有甚者,一个叫做 droste.zi ...

  9. Java 实现 bash命令

    Java 实现 bash命令 1.BASH 命令简介 Bash,Unix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写.1989年发布第一个正式版本,原先是计划用在GNU操作系统 ...

  10. 简单谈谈java中匿名内部类构造函数?

    先看看下面的代码能不能编译通过: public static void main(String[] args) {List l1 = new ArrayList();List l2 = new Arr ...