为了账号安全,请及时绑定邮箱和手机立即绑定

正确的方法以错误的年份操作日期字符串,但时间正确

正确的方法以错误的年份操作日期字符串,但时间正确

梵蒂冈之花 2021-05-01 15:50:29
我必须点击一个我无法修复的API,我需要启动一个计时器以显示某人排队的时间。我回来的日期是这种格式1556214336.316。问题是年份始终显示为1970,但是时间是正确的开始时间。我需要计算现在的时间与创建对话的时间之间的差。我尝试了这一点,但收效甚微,我想知道是否有一种优雅的方法来仅获取时间差而不是总秒数。 convertDateToTimerFormat = (time) => {    const now = new Date();    const diff = Math.round((now - parseInt(time.toString().replace('.', ''))) / 1000);    const hours = new Date(diff).getHours();    const minutes = new Date(diff).getMinutes();    const seconds = new Date(diff).getSeconds();    return `${hours}:${minutes}:${seconds}`;}怪异的parseInt(time.toString().replace('.', '')))似乎解决了1970年的问题,但是我仍然无法获得所需的数据。我尝试了momentjs库,但是他们的diff方法似乎只允许几天和几个小时。任何帮助/指导,将不胜感激。使用工作代码进行编辑:  convertDateToTimerFormat = (time) => {    const now = new Date();    // eslint-disable-next-line radix    const diff = new Date(Number(now - parseInt(time.toString().replace(/\./g, ''))));    const hours = diff.getHours();    const minutes = diff.getMinutes();    const seconds = diff.getSeconds();    return `${hours}:${minutes}:${seconds}`;  }
查看完整描述

2 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

Unix时间值的数量,因为时代,不会有像你十进制1556214336.316
如果我参加1556214336(不.316),并把它放在一个转换器,我得到的输出04/25/2019 @ 5:45pm (UTC)不是1970年-似乎一个精确的时间(我的避风港尚未经过独立验证)
,那么,看来您1556214336.316就是秒。自纪元以来的毫秒数

Javascript使用相同的纪元,但是是自纪元以来的毫秒数,而不是秒数,因此,如果我对所获得的时间是正确的,则应该能够删除小数点后的位,并使用所得的数字字符串。确实

var d = new Date(1556214336316);

console.log('Date is: ' + d.toUTCString());

产生


Date is: Thu, 25 Apr 2019 17:45:36 GMT

与转换器的“ 5:45 pm”时间完全匹配


var d = new Date(1556214336316);

console.log('Date is: ' + d.toUTCString());

假设您的值1556214336.316是一个从Web API返回的String,则可以删除小数,并且可以像这样完成转换(请注意,您不必继续创建新Date对象):


convertDateToTimerFormat = (time) => {

    const d = new Date( Number(time.replace(/\./g, '')) );

    return `${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}`;

};


console.log( 'time: ' + convertDateToTimerFormat('1556214336.316') );

根据您的使用,您可能想使用getUTCHours()等。


查看完整回答
反对 回复 2021-05-13
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

我对优雅并不了解,但这会以以下h:mm:ss格式计算并显示过期时间:


console.log(convertDateToTimerFormat(1556215236.316)); 


function convertDateToTimerFormat(time){


  // Converts `time` to milliseconds to make a JS Date object, then back to seconds

  const expiredSeconds = Math.floor(new Date()/1000) - Math.floor(new Date(time * 1000)/1000);


  // Calculates component values

  const hours = Math.floor(expiredSeconds / 3600), //3600 seconds in an hour

        minutes = Math.floor(expiredSeconds % 3600 / 60),

        seconds = expiredSeconds % 3600 % 60;


  // Adds initial zeroes if needed

  if (minutes < 10) { minutes = "0" + minutes; }

  if (seconds < 10) { seconds = "0" + seconds; }


  // Returns a formatted string

  return `${hours}:${minutes}:${seconds}`;

}


查看完整回答
反对 回复 2021-05-13
  • 2 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信