javascript - 处理年份错误但时间正确的日期字符串的正确方法

标签 javascript reactjs date

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

最佳答案

Unix time值是自纪元以来的数,并且不会像1556214336.316
那样带有小数 如果我将 1556214336 (不带 .316)放入 a converter我得到的输出 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:45pm”完全匹配

var d = new Date(1556214336316);
console.log('Date is: ' + d.toUTCString());

假设您的值 1556214336.316 是从 Web API 返回的字符串,您可以删除小数点,并且可以像这样完成转换(请注意,您不必继续创建新的 日期对象):

convertDateToTimerFormat = (time) => {
    const d = new Date( Number(time.replace(/\./g, '')) );
    return `${d.getHours()}:${d.getMinutes()}:${d.getSeconds()}`;
};

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

根据您的使用情况,您可能需要使用 getUTCHours() 等。

关于javascript - 处理年份错误但时间正确的日期字符串的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55856174/

相关文章:

javascript - 以编程方式将值插入空对象

python - Pandas 对开始日期之后发生的列中的数据求和

ios - Dateformatter 日期字符串返回 nil

javascript - 在 react 中寻找鼠标目标

Objective-C:如何从 Julian 日期字段创建 NSDate

javascript - React 组件中的意外标记,预期的

javascript - 在悬停的 li 元素上相对于 li 的位置显示一个隐藏的响应式 div

javascript - 如何在 Google map 中添加缩放控件

javascript - React Loadable 不会在浏览器刷新时更新

reactjs - 在另一个 webpack 项目中使用带有 React hooks 的 webpack 项目会导致错误