猿问

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

我必须点击一个我无法修复的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}`;

  }


梵蒂冈之花
浏览 173回答 2
2回答

阿晨1998

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()等。

拉丁的传说

我对优雅并不了解,但这会以以下h:mm:ss格式计算并显示过期时间:console.log(convertDateToTimerFormat(1556215236.316));&nbsp;function convertDateToTimerFormat(time){&nbsp; // Converts `time` to milliseconds to make a JS Date object, then back to seconds&nbsp; const expiredSeconds = Math.floor(new Date()/1000) - Math.floor(new Date(time * 1000)/1000);&nbsp; // Calculates component values&nbsp; const hours = Math.floor(expiredSeconds / 3600), //3600 seconds in an hour&nbsp; &nbsp; &nbsp; &nbsp; minutes = Math.floor(expiredSeconds % 3600 / 60),&nbsp; &nbsp; &nbsp; &nbsp; seconds = expiredSeconds % 3600 % 60;&nbsp; // Adds initial zeroes if needed&nbsp; if (minutes < 10) { minutes = "0" + minutes; }&nbsp; if (seconds < 10) { seconds = "0" + seconds; }&nbsp; // Returns a formatted string&nbsp; return `${hours}:${minutes}:${seconds}`;}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答