Javascript日期和时间戳(毫秒/秒)相互转化,日期分隔符不同转化结果不同

Javascript日期和时间戳(毫秒/秒)相互转化,日期分隔符不同转化结果不同

1、日期格式转为时间戳(UTC方法必须把分隔符转为逗号,其他方法转为反斜杠/,因为横杠-有误差)
4种转换方法:
Date.parse()
Date.UTC() //这个方法有问题,不建议使用
valueOf()
getTime()

(1)valueOf(): 该方法返回日期的毫秒表示,可以方便时间的比较,该方法返回的毫秒数精确到毫秒

var date = new Date();
date.valueOf();
1368283579633

new Date(时间字符串).valueOf();new Date(时间字符串.replace('-','/')).valueOf();

​ new Date(‘2014/4/23’).valueOf()

​ new Date(‘2014/4/23 15:44:25’).valueOf()

​ new Date(‘2014-4-23 15:44:25’.replace(’-’,’/’)).valueOf()

​ new Date(‘2014-4-23 15:44:25:123’.replace(’-’,’/’)).valueOf()

(2)Date.parse():该方法接受一个表示日期的字符串参数,然后尝试根据这个日期返回日期的毫秒数。ECMA-262没有定义该方法支持哪种日期格式,因此这个方法的行为因为浏览器实现而异。如果传入字符串不能表示日期,那么它会返回NaN。该方法返回的毫秒值后三位全为0,精确到秒数,没有毫秒数。

Date.parse("2012年9月9日")
NaN
Date.parse("2012 9 9")
1347120000000
// 毫秒数转换为日期格式
new Date(Date.parse("2012 9 9"))
Sun Sep 09 2012 00:00:00 GMT+0800 (中国标准时间)

Date.parse(时间字符串)或Date.parse(new Date(时间字符串)或Date.parse(new Date(时间字符串.replace('-','/')))

​ Date.parse(‘2012/12/15’)

​ Date.parse(new Date(‘2012/12/15’))

​ Date.parse(new Date(‘2012-12-15’.replace(’-’,’/’)))

(3)getTime(): 返回表示日期的毫秒数,与valueOf()返回的值相同,也精确到毫秒数。

var date = new Date();
date.getTime();
1368283691951

new Date().getTime()或new Date(时间字符串.replace('-','/')).getTime()

new Date(时间字符串).getTime()【IOS无法解析】

(4)Date.UTC(): 该方法也返回表示日期的毫秒数,但是该方法接受的参数是年份、基于0的月份、月份中的哪一天、小时数、分钟、秒以及毫秒。这些参数中只有前两个参数是必需的。(不建议使用)

Date.UTC(12)
NaN
 
Date.UTC(2013,4,11);
1368230400000

示例:

// 1
var strtime = '2014-04-23 18:55:49:123';
var date = new Date(strtime.replace(/-/g, '/'));
var timeStamp = date.valueOf();
 
// 2
var strtime = '2014-04-23 18:55:49:123';
var data = new Date(strtime.replace(/-/g, '/'));
var timeStamp = Date.parse(data);
 
// 3
var strtime = '2014-04-23 18:55:49:123';
var date = new Date(strtime.replace(/-/g, '/'));
var paramTimestamp = date.getTime();
 
// ios无法解析
var date = new Date('2018-06-08 18:00:00');
var paramTimestamp = date.getTime();

//4(有问题,不建议使用,获得的结果不一样,如下)
Date.UTC(2021,12,5)//不准确,跟其他三种方法得到的结果不一样,不建议使用
1641340800000
new Date('2021/12/5').valueOf()
1638633600000
new Date('2021/12/5').getTime()
1638633600000
Date.parse('2021/12/5')
1638633600000
Date.UTC(2021-12-5)//不可用
1072915200000
Date.UTC(2021/12/5)//不可用
-1167609600000

//示例
Date.UTC(2021,12,5)
1641340800000
new Date("2021-12-5").valueOf()
1638633600000
new Date("2021/12/5").valueOf()
1638633600000
new Date("2021-12-5").getTime()
1638633600000
new Date("2021/12/5").getTime()
1638633600000
Date.parse("2021-12-5")
1638633600000
Date.parse(new Date("2021-12-5"))
1638633600000


// 注意
time1 = date.getTime(); // 精确到毫秒
time2 = date.valueOf(); // 精确到毫秒
time3 = Date.parse(date); // 只能精确到秒
time4 = Date.UTC(2021,12,5);//精确到毫秒
区别:
  1. time1 = date.getTime(); // 精确到毫秒
  2. time2 = date.valueOf(); // 精确到毫秒
  3. time3 = Date.parse(date); // 只能精确到秒
  4. time4 = Date.UTC(2021,12,5);//精确到毫秒
2、时间戳转为日期格式

(1)new Date(1637031243978)

new Date(1637031243978)
Tue Nov 16 2021 10:54:03 GMT+0800 (中国标准时间)

new Date("2021/12/5")
Sun Dec 05 2021 00:00:00 GMT+0800 (中国标准时间)

typeof('2021/9/78')
'string'
typeof(new Date(1637031243978))
'object'
typeof(new Date('2021/9/78'))
'object'

(2)函数转化

const getTimestampConversion = function (timestamp) {
  let timeStamp
  let timeStampLen = timestamp.toString().length
  if (timeStampLen === 10) {
    timeStamp = timestamp * 1000
  } else if (timeStampLen === 13) {
    timeStamp = timestamp
  } else {
    timeStamp = timestamp
  }
  let date = new Date(timeStamp) // 时间戳为10位需*1000,时间戳为13位的话不需乘1000
  let Y = (date.getFullYear() + '-')
  let M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-'
  let D = (date.getDate() < 10 ? '0' + date.getDate() + ' ' : date.getDate() + ' ')
  let h = (date.getHours() < 10 ? '0' + date.getHours() + ':' : date.getHours() + ':')
  let m = (date.getMinutes() < 10 ? '0' + date.getMinutes() + ':' : date.getMinutes() + ':')
  let s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds())
  return Y + M + D + h + m + s
}
 
export default getTimestampConversion

//使用方法如下:
getTimestampConversion(1072915200000)
2004-01-01 08:00:00(转化的结果,个位数会补0,如01new Date(1072915200000)
Thu Jan 01 2004 08:00:00 GMT+0800 (中国标准时间)
new Date("2004-1-1").valueOf()
1072886400000
new Date("2004-01-01").valueOf()
1072915200000
new Date("2004-01-1").valueOf()
1072886400000
new Date("2004-1-01").valueOf()
1072886400000

注意:

日期格式分隔符如果是-,那么如果日期中补位两个0或一个0跟不补0的结果不一样,比如2021-01-01,那么转化结果和2021-1-1不一样
如果分隔符是/,那么日期格式带不带0无所谓

示例:

new Date("2021/1/1").valueOf()
1609430400000
new Date("2021/01/1").valueOf()
1609430400000
new Date("2021/1/01").valueOf()
1609430400000
new Date("2021/01/01").valueOf()
1609430400000

new Date("2021-1-1").valueOf()
1609430400000
new Date("2021-01-1").valueOf()
1609430400000
new Date("2021-1-01").valueOf()
1609430400000
new Date("2021-01-01").valueOf()
1609459200000


new Date("2014/4/23").valueOf()
1398182400000
new Date("2014/04/23").valueOf()
1398182400000
new Date("2014-4-23").valueOf()
1398182400000
new Date("2014-04-23").valueOf()
1398211200000

总结:(1)必须把日期格式转为反斜杠/分割

(2)不使用UTC方法

你可能感兴趣的:(大前端,javascript,开发语言,ecmascript)