将给定的unix时间字符串EST转换为本地服务器时间CST,并评估unix时间和当前时间之间的时差

问题描述

我一直在努力使用JavaScript在两个日期/时间之间进行比较。我正在尝试评估所提供的Unix时间字符串(可能是EST)和JavaScript格式的当前时间(服务器正在运行的任何时区)之间的差异,并以小时/分钟/毫秒为单位来获取差异。

我相信我可以尝试/尝试过三种方法

  1. 将给定时区中当前服务器的javascript时间转换为unix时间,然后从中减去提供的unix时间
  2. 根据服务器的时区将提供的unix时间转换为javascript格式,然后从服务器的当前时间中减去它
  3. 将两次都转换为UTC或GMT并对其进行数学运算

我已经搜索了StackOverflow,并尝试了许多不同的方法,但无法获得准确的值。

例如,如果提供的unix时间为1599206400000,而当前服务器的javascript时间为Fri Sep 04 2020 16:47:26 GMT-0500 (Central Daylight Time),我如何得到两者之间的毫秒差?

很抱歉,没有代码示例。原因是我尝试了很多不同的代码修订版本而没有成功,我眼前的东西不再反映所有这些努力。

如果可以的话请提供帮助,并预先感谢您!我已经连续两天在这个问题上苦苦挣扎了!

解决方法

I。您可以使用momentjs解决此问题:

timestampInMilliseconds = 1599206400000;
currentTimestampInMilliseconds = parseInt(moment.utc().format('x'));
currentTimestampInMilliseconds - timestampInMilliseconds;
// Example return value 94092301
  1. 要获取UTC中的当前时间,请使用:moment.utc()

  2. 要获取以毫秒为单位的momentJS日期的时间戳,请使用:format('x')

  3. 您还需要将其强制转换为int(借助parseInt函数),因为format函数的输出为string类型>

II。普通的JS解决方案甚至更简单:

timestampInMilliseconds = 1599206400000;
currentTimestampInMilliseconds = (new Date).getTime();
currentTimestampInMilliseconds - timestampInMilliseconds;
// Example return value 94092301

在这种情况下,您可以自由使用getTime(),因为官方文档说:getTime() always uses UTC for time representation

,

// timestamp
var d = new Date()
d.setHours(4) // 4am
d.setMinutes(00) //00 minutes

var unixTimeStamp = Math.floor(d.getTime() / 1000); // converts to unix time

console.log(unixTimeStamp)

var apicurrentTime
var timeStamp


var differenceintime = apicurrentTime - timeStamp

,
  • 服务器:建议使用 UTC(ISO-8601格式)。这是标准的序列化格式。
  • 客户端:客户端可以在本地处理时间并发送等同于UTC的时间。使用toISOString到服务器。

如果您正在寻找普通的JS代码,getTime()-这将返回Unix时间,并且没有时区。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTime

让我们举个例子:

const timeA = 1599206400000;  // already Unix time
const timeB = new Date(2020,08,04,16,47,26,531).getTime(); // getTime()
console.log(timeA,timeB,difference(timeB - timeA));

输出:

1599206400000 1599218246531 {hour: 3,min: 17,seconds: 26,milliseconds: 531}

difference函数的定义:

const difference = (millis) => {
    const parts = [(millis / 3600000) % 60,(millis / 60000) % 60,(millis / 1000) % 60,millis % 1000];
    const [hour,min,seconds,milliseconds] = parts.map((v) => parseInt(v));
    return { hour,milliseconds };
};