时间Date

时间构造函数的使用

new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

13.1 时间名词解析

GMT - 格林尼治标准时间、格林威治平均时间

Greenwich Mean Time 由于地球轨道并非圆形,其运行速度又随着地球与太阳的距离改变而出现变化,因此视太阳时欠缺均匀性。 视太阳日的长度同时亦受到地球自转轴相对轨道面的倾斜度所影响。 为着要纠正上述的不均匀性,天文学家计算地球非圆形轨迹与极轴倾斜对视太阳时的效应。 平太阳时就是指经修订后的视太阳时。在格林尼治子午线上的平太阳时称为世界时(UTO),又叫格林尼治平时(GMT)。

UTC - 协调世界时间

Universal Time Coordinated 是国际无线电咨询委员会制定和推荐的,UTC相当于本初子午线(即经度0度)上的平均太阳时。
它是经过平均太阳时(以格林威治标准时间GMT)、地轴运动修正后的新时标以及以「秒」为单位的国际原子时所综合精算而成的时间,
计算过程相当严谨精密,因此若以「世界标准时间」的角度来说,UTC比GMT来得更加精准。
其误差值必须保持在0.9秒以内,若大于0.9秒则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。
所以基本上UTC的本质强调的是比GMT更为精确的世界时间标准.它其实是个更精确的GMT.

LT - 本地时间

LocalTime 所在时区的时间。UTC或GMT与LT如下的换算关系:LT=UTC+时区差 ;
东区是加相应的时区差,西区是减时区差。如北京是东八区,则北京时间=UTC+8.

13.2 时间的换算

1. UTC时间 与 GMT时间
我们可以认为格林威治时间就是世界协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的。

2. UTC时间 与 本地时

UTC + 时区差 = 本地时间
时区差东为正,西为负。在此,把东八区时区差记为 +0800,
UTC + (+0800) = 本地(北京)时间 (1)
那么,UTC = 本地时间(北京时间))- 0800 (2)
3.UTC 与 Unix时间戳

在计算机中看到的UTC时间都是从(1970年01月01日 0:00:00)开始计算秒数的。所看到的UTC时间那就是从1970年这个时间点起到具体时间共有多少秒。 这个秒数就是Unix时间戳。

13.3 时间对象的静态方法

  • Date.now(): 方法返回自1970年1月1日 00:00:00 UTC到当前时间的毫秒数 ,类型为Number。

    • 有一个参数,该参数必须是一个时间戳;若没有则默认值为Date.now(),也就是当前时间

      目的:把时间戳转成时间对象来表示

    var date = new Date(2005, 6, 12, 6, 30, 0 , 2333);
    console.log(date);	
    结果值:Date Sun Jul 01 2001 06:30:02 GMT+0800 (中国标准时间)
    月份是011,所以6月返回值是Jul
    
  • Date.UTC(year,month[,date[,hrs[,min[,sec[,ms]]]]]):方法接受的参数同日期构造函数接受最多参数时一样,返回从1970-1-1 00:00:00 UTC到指定日期的的毫秒数(时间戳)。

    • year:1900 年后的某一年份。

    • month:0 到 11 之间的一个整数,表示月份。

    • date:1 到 31 之间的一个整数,表示某月当中的第几天。

    • hrs:0 到 23 之间的一个整数,表示小时。

    • min:0 到 59 之间的一个整数,表示分钟。

    • sec:0 到 59 之间的一个整数,表示秒。

    • ms:0 到 999 之间的一个整数,表示毫秒。

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

    • ISO 8601标准格式:
      • Year: YYYY (eg 1997)
      • Year and month: YYYY-MM (eg 1997-07)
      • Complete date:YYYY-MM-DD (eg 1997-07-16)
        • 日期形式 可以用 / , 空格 来分割
      • Complete date plus hours and minutes: YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
      • Complete date plus hours, minutes and seconds: YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
      • Complete date plus hours, minutes, seconds and a decimal fraction of asecond:YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
    • RFC2822(IETF)标准 格式:
      • “月/日/年”,如6/13/2004;
      • “英文月名 日,年”,如January 12,2004;
      • “英文星期几 英文月名 日 年 时:分:秒 时区”,如Tue May 25 2004 00:00:00 GMT-0700
    • 若parse没有参数,则输出Invalid Date,表示无效的时间
    • T必须是大写,T后面的时间必须是双位数值,其中1s = 1000ms
      • 后面是时区
    • parse不声明时间区,则将该参数作为当前时区的时间点,默认+08:00(当前时区,冒号可省),在转成时间戳时会倒推8小时。

13.4 时间实例化对象的方法

  • dateObj.getTime() :返回一个时间的格林威治时间数值,无参数。
var date = new Date(2019, 8, 7, 8, 00, 0 , 2333);
console.log(date.getTime());
  • dateObj.setTime(timeValue):以一个表示从1970-1-1 00:00:00 UTC计时的毫秒数为来为 Date 对象设置时间。
  • 目的:改变目标时间,破坏性方法
date.setTime(Date.UTC(2005, 6, 5)); 
  • dateObj.getFullYear():返回的值是绝对数。 对于1000到9999之间的日期。
  • dateObj.setFullYear(yearValue[, monthValue[, dayValue]]):根据传入的时间值来改变当前对象时间。
    • yearValue:指定年份的整数值,例如1995。
    • monthValue:一个0到11之间的整数值,表示从一月到十二月。
    • dayValue:一个1到31之间的整数值,表示月份中的第几天。如果你指定了 dayValue 参数,就必须同时指定 monthValue
  • dateObj.getYear() :返回指定的本地日期的年份。因为 getYear 不返回千禧年[full years] (“year 2000 problem”),所以这个方法不再被使用,现在替换为 getFullYear
  • dateObj.setYear(yearValue):根据本地时间为一个日期对象设置年份。
  • dateObj.getMonth():返回一个0 到 11的整数值: 0 代表一月份,1 代表二月份, 2 代表三月份,依次类推。
  • dateObj.setMonth(monthValue[, dayValue]):根据本地时间为一个设置年份的日期对象设置月份。 返回基于 1 January 1970 00:00:00 UTC 开始计算的毫秒数 。
    • monthValue:介于 0 到 11 之间的整数(表示一月到十二月)。
    • dayValue:从 1 到 31 之间的整数,表示月份中的第几天。
  • dateObj.getDate():根据本地时间,返回一个指定的日期对象为一个月中的第几天。
  • dateObj.setDate(dayValue): 根据本地时间来指定一个日期对象的天数。
  • dateObj.getDay():返回一个整数值: 0 代表星期日, 1 代表星期一,2 代表星期二, 依次类推。
  • dateObj.getHours():返回一个0 到 23之间的整数值。
  • dateObj.setHours(hoursValue[, minutesValue[, secondsValue[, msValue]]]):根据本地时间为一个日期对象设置小时数,返回从1970-01-01 00:00:00 UTC 到更新后的日期对象实例所表示时间的毫秒数。
  • dateObj.getMinutes():返回一个0 到 59的整数值,即获取目标时间的分钟。
  • dateObj.setMinutes(minutesValue[, secondsValue[, msValue]]):根据本地时间为一个日期对象设置分钟数。
  • dateObj.getSeconds():根据本地时间,返回一个指定的日期对象的秒数。
  • dateObj.setSeconds(secondsValue[, msValue]):根据本地时间设置一个日期对象的秒数。
  • dateObj.getMilliseconds():返回一个0 到 999的整数,获取本地时间的毫秒。
  • dateObj.setMilliseconds(millisecondsValue):根据本地时间设置一个日期对象的豪秒数。
  • 我们还可以使用如下的方法来根据UTC时间为基础来获取或设置时间:

注意:中国时区比格林威治时间早8小时,所以在返回Hours时会减少8小时

  • dateObj.getUTCFullYear()
  • dateObj.setUTCFullYear(yearValue[, monthValue[, dayValue]])
  • dateObj.getUTCMonth()
  • dateObj.setUTCMonth(monthValue[, dayValue])
  • dateObj.getUTCDate()
  • dateObj.setUTCDate(dayValue)
  • dateObj.getUTCDay()
  • dateObj.getUTCHours()
  • dateObj.setUTCHours(hoursValue[, minutesValue[, secondsValue[, msValue]]])
  • dateObj.getUTCMinutes()
  • dateObj.setUTCMinutes(minutesValue[, secondsValue[, msValue]])
  • dateObj.getUTCSeconds()
  • dateObj.setUTCSeconds(secondsValue[, msValue])
  • dateObj.getUTCMilliseconds()
  • dateObj.setUTCMilliseconds(millisecondsValue)
  • dateObj.toString():返回一个字符串,表示该Date对象。
  • dateObj.toLocaleString() :根据当地语言规定返回代表着时间的字符串。
  • dateObj.toDateString():以美式英语和人类易读的形式返回一个日期对象日期部分的字符串。
  • dateObj.toLocaleDateString():根据当地语言规定返回一个日期对象日期部分的字符串。
  • dateObj.toTimeString():以美式英语和人类易读的形式返回一个日期对象时间部分的字符串。
  • dateObj.toLocaleTimeString():根据当地语言规定返回一个日期对象时间部分的字符串。
  • dateObj.toUTCString():把一个日期转换为一个字符串,使用UTC时区。
  • dateObj.toGMTString():把一个日期转换为一个字符串,使用UTC时区。(已废除)
  • dateObj.toISOString():返回一个 ISO 8601格式的字符串: YYYY-MM-DDTHH:mm:ss.sssZ。时区总是UTC(协调世界时),加一个后缀**“Z”**标识。

UTC格林威治标准时间 与 GMT格林尼治标准时间 的兼容性问题

var date = new Date;
var dateStr = (date.toUTCString() || date.toGMTString());var dateStr = date[(date.toGMTString||date.toUTCString).name]()
console.log(dateStr)

(date.toGMTString||date.toUTCString)返回函数引用地址,属性.name返回该函数名
new date的作用:将时间戳转换成时间表示法,必须有一个参数(若没有则默认值为Date.now(),也就是当前时间)
var date = new Date(2005, 6, 12, 6, 30, 0 , 2333);
console.log(date);				//以时间表示法的形式打印目标时间
console.log(Date.now());		//打印时间戳

猜你喜欢

转载自blog.csdn.net/Sandersonia/article/details/132664699
今日推荐