问题描述
我一直在努力使用JavaScript在两个日期/时间之间进行比较。我正在尝试评估所提供的Unix时间字符串(可能是EST)和JavaScript格式的当前时间(服务器正在运行的任何时区)之间的差异,并以小时/分钟/毫秒为单位来获取差异。
我相信我可以尝试/尝试过三种方法:
- 将给定时区中当前服务器的javascript时间转换为unix时间,然后从中减去提供的unix时间
- 根据服务器的时区将提供的unix时间转换为javascript格式,然后从服务器的当前时间中减去它
- 将两次都转换为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
-
要获取
UTC
中的当前时间,请使用:moment.utc()
-
要获取以毫秒为单位的momentJS日期的时间戳,请使用:
format('x')
-
您还需要将其强制转换为
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 };
};