js Date对象要注意的问题(时间转换)
1、时间戳和时间对象可以灵活转变:
let n = new Date() // 返回的是国际时间的当前时间
let nt =n.getTime()
let n2 =new Date(nt)
console.log(n,nt,n2)
输出为当前时间和时间戳:
2、时间转换的字符串参数格式不同,返回的时间格式有时会不同
// 时分秒如果有参数,返回的是参数中的国际时间对应的本地时区时间。
let i = new Date('2018-12-06 0:0:0')
let j = new Date('2018/12/06 0:0:0')
输出 :Date 2018-12-05T16:00:00.000Z
Date 2018-12-05T16:00:00.000Z
// 时分秒如果没有参数, ‘-’ 符号的返回的是国际标准时间0点,‘/’符号返回的是国际标准时间0点对应的本地时区时间
let i2 = new Date('2018-12-06')
let j2= new Date('2018/12/06')
console.log(i2,j2)
输出:Date 2018-12-06T00:00:00.000Z
Date 2018-12-05T16:00:00.000Z
// 时间戳对比确认
console.log(i.getTime(),j.getTime(),i2.getTime(),j2.getTime())
输出:
console.log(j == j2)
输出: false
3、非字符串参数,记得月份是0-11:
let ii = new Date(2018,12,6,0,0,0) let ii2 = new Date(2018,12,6) console.log(ii,ii2)
输出的是国际时间0时对应的本地时间:
4、参数为时间戳,输出的是本地时区时间
let i1 =new Date('2018-12-06 0:0:0') let i2 =new Date('2018-12-06 0:0:0').getTime() let i3 =new Date(i2) console.log(i1,i2,i3)
输出:
小例子:新手处理时间的运算还是感觉很容易混乱
例如:要判断到本地北京时间 2018/12/6 0:0:0 进行某些操作。那么就要:
// +8小时的时间戳,计算出北京时间 2018-12-06 0:0:0 的时间戳 let i4 =new Date('2018-12-06 0:0:0').getTime()+(8*60*60*1000) // 当前时间戳 let n = new Date().getTime()
if(n == i4){ console.log('想要的操作') }
总结:* 每个传进Date的时间对象参数都默认是国际标准时间,而返回的值则根据格式不同进行时间的转换或者不转换。
* 时间运算用时间戳。
友情链接: https://www.cnblogs.com/hjsblogs/p/5842717.html 这个大神说得很具体。