JS对时间格式的处理汇总

在项目实践中,尤其是后台的项目,经常遇到input框中的时间字符串和时间戳,又或者前后两个时间对比大小,或者设置固定相差多少天进行搜索的功能等实际问题。

往往在网上搜到问题的解决方法,用过去了,以后再用,就又忘了,或者记得不全,减低了开发效率。因此,在这里做一个专题的笔记整理,方便以后快速查找。

1、时间字符串转换成时间戳
var a = new Date('2017-11-11 11:11:11')
var c = a.getTime();
console.log(a)
console.log(c)
结果:
a => Sat Nov 11 2017 11:11:11 GMT+0800 (中å½æ åæ¶é´)
c => 1510369871000

上边的代码,是模拟一个input框中获取到的时间(字符串形式)数据,向时间戳的转换过程。首先,通过使用时间构造函数,将时间(字符串形式)转换成标准的时间格式,然后通过Date对象的getTime()方法转化成时间戳(注意:此时的时间戳是毫秒级的),也可以使用valueOf()的方法转换,结果是相同的,也可以使用Date.parse()的方法转换,结果唯一的不同是毫秒级的后三位直接是000,而不是具体数据的具体毫秒值。根据数据的需求,使用毫秒级的或者再在此基础上除以1000,获得秒级时间戳。


var d = c / 1000;
console.log(d);
d => 1510369871
Math.round(d) => 1510369871

如果为了数据的严谨性,在获得秒级数据的时候,还要追加Math.round()方法,取整使用该数据。

2、时间戳转换为时间字符串
var a = new Date(1510369871000)
console.log(a)
a => Sat Nov 11 2017 11:11:11 GMT+0800 (中å½æ åæ¶é´)

时间戳向时间字符串的转换,需要先将时间戳数据转换为毫秒级的,然后使用构造函数将时间戳转换为标准时间格式,随后根据需求使用toUTCString()、toLocaleString() 三种方法,将时间转换成年月日的格式。

var c = a.toLocaleString();
console.log(c)
c => 2017年11月11日 11:11:11
var c = a.toUTCString();
console.log(c)
c => Sat, 11 Nov 2017 03:11:11 GMT

如果需要特殊的格式(例如:YYYY-MM-DD hh:mm:ss),通常情况下,我们使用正则表达式来辅助对数据进行转换。

var d = c.replace(/年|月/g, "-").replace(/日/g, " ");
console.log(c)
console.log(d)
c => 2017年11月11日 11:11:11
d => 2017-11-11  11:11:11

这是比较简便的方法,如果项目需求不是这样,也可是使用Date对象的其他方法,单独获取相应的年、月、日、小时、分钟、秒等数据。

function   formatDate(now)   {     
   var   year=now.getYear();     
   var   month=now.getMonth()+1;     
   var   date=now.getDate();     
   var   hour=now.getHours();     
   var   minute=now.getMinutes();     
   var   second=now.getSeconds();     
   return   year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;     
}
3、两个时间戳之间的计算换算成具体的年月日
在个别的项目中,由于展示的需求,通常需要将返回的时间字符串或者时间戳进行对比后,计算差值,再转换成具体的年月日的间隔进行展示。以下代码源自网络上查到的方法,觉得不错,再次进行追加收藏一下,已备不是之需:
const a = '2017-12-11 08:11:30';
const b = '2018-12-15 20:18:42';
  const start = new Date(a).getTime();
  let end = new Date(b).getTime();
  let runTime = (end - start)/1000;
  const year = Math.floor(runTime / 86400 / 365);
  runTime = runTime % (86400 * 365);
  const month = Math.floor(runTime / 86400 / 30);
  runTime = runTime % (86400 * 30);
  const day = Math.floor(runTime / 86400);
  runTime = runTime % 86400;
  const hour = Math.floor(runTime / 3600);
  runTime = runTime % 3600;
  const minute = Math.floor(runTime / 60);
  runTime = runTime % 60;
  const second = runTime;
  console.log(year,month,day,hour,minute,second);
  >> 1 0 4 12 7 12

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值