【问题标题】:how to set a date to expire in 72hours如何设置72小时后到期的日期
【发布时间】:2016-03-08 08:37:23
【问题描述】:

功能:

用户玩游戏,当用户获胜时,他们将被导航到兑换页面。用户将在 72 小时内从礼品页面兑换礼品。因此,兑换将在用户在“恭喜”兑换页面的系统时间72小时后到期。

做了什么:

首先,我尝试在用户导航到祝贺页面时获取当前的 systemTime。

其次,我尝试通过增加 3 天将其设置为 72 小时后来获取到期日期。

最后,我尝试将计算的到期日期附加到<div> 的到期日期。

问题:

不知何故,到期日期显示不正确。例如,如果今天的日期是 8 月 3 日,那么结果会显示 14 月 2 日。

因此,显示的日期不是 72 小时后,而是一个月前几天。

我做错了什么??

 function win() {

   //get current System Time and Date
   var endDate = new Date();

   //Get Expiry Date
   var date = new Date(endDate);
   date.setDate(date.getDate() + 3);
   var expiryDate = (date.getDate() + 3) + "/" + (date.getMonth());
   document.getElementById('ExpiryDate').innerHTML = expiryDate;

   console.log("test");
   $("#my-memory-game").fadeOut(function() {
     win_video();
   })
 }
<div id="congratulations">
  <canvas id="MyCanvas" style="width:1080px; height: 1920px;">
    Your browser does not support the HTML5 canvas tag.
  </canvas>
  <div id="ExpiryDate"></div>
</div>

【问题讨论】:

  • date.getMonth() 是基于 0 的索引,所以 2 是三月
  • @Haketo 所以我必须在 getMonth() 上做一个 +2 吗??
  • 不,如果 2 是三月,你应该 +1 得到 3 ... 。但是还有另一个问题,如果第 31 天,您将在 31 中添加 3 天,即 34,第 34 天不存在.. 看这个帖子:stackoverflow.com/questions/3818193/…
  • 不,你应该做一个 +3,因为 March 是 3。所以你从 getMonth() +3 得到的值是正确的值。
  • @MikeLammers 为什么是getMonth() +3?没有意义..会返回 5

标签: javascript jquery date


【解决方案1】:

首先,获取正确的月份

在 javascript 中,月份索引是从 0 到 11,而不是从 1 到 12。因此,在显示月份数值时,您应该始终使用 date.getMonth() + 1。这就是为什么你得到2(二月)而不是3(三月)。

Javascript getDate() reference

那么,那天

您将 3 天添加两次(8 + 3x2 = 14 年)。

date.setDate(date.getDate() + 3);
var expiryDate = (date.getDate() + 3) + "/" + (date.getMonth());

删除第二个+ 3,你应该可以开始了。

【讨论】:

    【解决方案2】:

    你只需要在日期上加 3:

    var now = new Date();
    
    // Copying the date is actually pointless, but hey...
    var expireDate = new Date(+now);
    
    // Add 3 days
    expireDate.setDate(expireDate.getDate() + 3);
    
    // Show date and month, note that the month is zero indexed so add 1
    // when displaying it
    document.write(expireDate.getDate() + '/' + (expireDate.getMonth() + 1));

    您可以放心地在月底之后添加天数,3 月 31 日加上 3 天将导致 4 月 3 日。

    但无论如何,在客户端上执行此操作似乎并不安全,因为您不知道主机系统时钟的准确度。我会向服务器发送一条消息并跟踪那里的情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多