仔细对比剖析有了两个推论
1newDate(/)接收的是当地时间没写时分秒手动补0输入与输出一致
2newDate(-)接收的是UTC时间没写时分秒手动补0输出本地时间写了时分秒也就是YYYY-MM-DDhh:mm:ss格式时接收的是当地时间输入与输出一致
---------------------最后看里面这块-----------------------
一、时间戳和时区
1Unix时间戳Unixtimestamp定义为从1970年01月01日00时00分00秒(UTC)起至现今经过的总秒数。
2JavaScript中提供的Date对象可以将所有时间都存为一个整数表示从1970年1月1日00:00:00起的总微秒数。
↑这两点意味着
1使用unix时间戳作为参数须要除以1000得到微秒数Date()对象能够正确接收getTime时须要乘以1000能够得到时间戳。
2js中判定一个时间戳的精度可以靠时间戳宽度精确到秒是10位精确到纳秒是13位。
3在js中借助时间戳很容易估算出一个间隔恒定的时间轴或则给一个时间推断出某段时间之前or以后的具体日期或则日期比较
3广州时间GMT8UTC8
GMT是格林尼治平均时UTC是世界标准时/协调世界时/原子时。后者是太阳时GMT的正午为太阳在格林尼治上空最低点的时间而且这个时间受月球自转速率影响所以每三天的时间都存在一定偏差前者由原子基态跃迁震动频度计时得出偏差很小。GMT几乎等于UTC。上海时间采用东八区时间备考一下地理本初子午线是0度纬线穿过格林尼治天文台日期变更线基于东西经重合的180度纬线。全球24个时区里我们在东经120度落在东八区因为月球自西向东旋转我们要比美国的盆友更早迎接新的三天的早中晚时间上就是早了8个小时。当日本时间为正午时我们的时间为下午8点这时全球都在同三天。
↑这意味着
Unix时间戳起始时间是我们广州时间的1970年01月01日08时00分00秒
二、几种表示时间的格式/标准
1RFC-2822标准格式形如
SunApr08201811:38:39GMT0800(CST)
2ISO-8601标准格式其中一种常见的格式形如
2018-04-08T11:38:3908:00日期用“-”相隔与时间用“T”连接
2018-04-08T11:38:39ZZ代表UTC时间Z也可写成00:00
三、js中的Date对象
1Date()作为函数不管有无参数直接调用获取的是当前的日期和时间结果是表示当前时间的字符串而且是早已转换为当前时区的时间
2Date()作为构造函数无参数时使用newDate()结果是表示当前时间的对象而且是早已转换为当前时区的时间
GMT0800(CST)代表东八区CST(chinastandardtime)表示中国标准时间
3作为构造函数时Date对象可以接收多种格式的参数用法如下
newDate()//返回当前时间
newDate(number)//number为自1970.01.0100:00:00经过的微秒数返回number微秒后的时间
newDate(string)//string代表时间的字符串返回这个时间的Date对象
newDate(yearlinux多线程编程,month,dayunix时间戳长度,hoursunix时间戳长度linux操作系统好吗,minutes,seconds,milliseconds)
构造出的日期拿来显示时会转为本地时间(toString方式)
当参数为string时写法好多所有能被Date.parse()解析的字符串都可以作为参数。须要注意的是es5中当日期以“-”作为分隔符且月日数字大于10后面补0如2018-09-03和数字小于9如2018-10-10JavaScript接收时会把字符串当成ISO-8601格式根据0时区也就是UTC时间来接收es6改为没有指定时区都会默认为当地时间。其他格式如2018/10/10都是非ISO-8601格式接收当成本地时间。2018-04-08T00:00:00Z是UTC2018-04-0800:00:00非UTC等于ISO-8601格式的2018-04-08T00:00:0008:00。
↑这也就解释了开篇的苦恼猜想基本正确只是有“-”不一定是UTC并且猜想的时侯对于GMT和UTC没有做精确分辨。真正缘由里面这段。
4日期的运算
两个日期对象相乘得到相差的微秒数相乘为两个日期字符串的相乘。
↑这意味着算时间差时无需先getTime可以直接相加。