Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过获取两个日期(以毫秒为单位)之间的差值来显示Moment.js的倒计时-ReactJS_Javascript_Reactjs_Momentjs_React Compound Timer - Fatal编程技术网

Javascript 通过获取两个日期(以毫秒为单位)之间的差值来显示Moment.js的倒计时-ReactJS

Javascript 通过获取两个日期(以毫秒为单位)之间的差值来显示Moment.js的倒计时-ReactJS,javascript,reactjs,momentjs,react-compound-timer,Javascript,Reactjs,Momentjs,React Compound Timer,我正在构建一个页面,该页面具有特定的过期期限,根据该用户首次打开页面时允许的最大天数和页面计算 在计算页面过期前的剩余时间时,页面将依赖两个值:- durationInDaysFromApi:允许打开页面的最大天数。 timestampFromApi:用户第一次打开页面的时间。 我试图在代码中执行的步骤是获取毫秒值并在倒计时中使用它:- 将从api获取的时间戳的时区转换为亚洲/科威特。 var createdAt=力矩.tztimestampFromApi,亚洲/科威特 将x天数添加到times

我正在构建一个页面,该页面具有特定的过期期限,根据该用户首次打开页面时允许的最大天数和页面计算

在计算页面过期前的剩余时间时,页面将依赖两个值:-

durationInDaysFromApi:允许打开页面的最大天数。 timestampFromApi:用户第一次打开页面的时间。 我试图在代码中执行的步骤是获取毫秒值并在倒计时中使用它:-

将从api获取的时间戳的时区转换为亚洲/科威特。 var createdAt=力矩.tztimestampFromApi,亚洲/科威特

将x天数添加到timestampFromApi:- var added=createdAt.clone.adddurationInDaysFromApi,天

获取两个日期之间的差值以计算剩余时间 直到该用户的页面访问过期:- const diffinmillizes=added.diffcreatedAt

因此,最终的等式将看起来像计数器=added-createdAt的剩余时间expirein毫秒

以下是我尝试执行的操作的示例代码:-

  const timestampFromApi = "2020-08-29 04:39:14";
  const durationInDaysFromApi = 7;
  var createdAt = moment.tz(timestampFromApi, "Asia/Kuwait");
  var added = createdAt.clone().add(durationInDaysFromApi, "days");
      added = moment.tz(added, "Asia/Kuwait");
  const diffInMilliseconds = added.diff(createdAt);
我的代码的问题是它总是返回等于7天的毫秒值,如何修复它以返回两个日期之间的毫秒数来获取页面过期的剩余时间?

您需要添加7天,然后获取该时间,并将该日期时间与您当前的日期时间进行比较,然后使用.diff函数获取毫秒差,您将使用该函数返回您的反应计数器 插件

它总是显示剩余7天的原因是您总是将这些天添加到timestampFromApi中,但不与当前日期时间进行比较

实时沙盒演示:

Live SO演示:显示剩余毫秒数

const dateFromApi=2020-08-29 16:37:58; const createdAt=moment.tzdateFromApi,亚洲/科威特; const added=createdAt.clone.add7,天; const now=moment.tzAsia/Kuwait//现在是科威特时间 const duration=added.diffnow,毫秒//以毫秒为单位获取差异 console.logduration
你的代码非常好。它连续显示7天,因为更改durationInDaysFromApi值时计时器组件未更新。当durationInDaysFromApi值更改时,您只需使用UseEffect或componentDidMount来更新计时器组件。

我认为这是因为使用7Yes@Boussadjrahim suggest修复的durationInDaysFromApi是正确的。你们想知道timestampFromApi和DurationIndayFromAPI之间的区别,对吗?是的,它看起来是正确的。这需要7天,因为它的持续时间是固定的