【问题标题】:Check if a date is 24 hours old检查日期是否为 24 小时前
【发布时间】:2018-07-18 14:54:50
【问题描述】:

我有一个创建日期。我想运行一个 if/switch 语句来知道现在的日期和时间是否比创建日期超过 24 小时。

如果创建日期超过 24 小时前,请执行一些操作,如果少于 24 小时前,请执行其他操作。

let now = +new Date();

// This is returned as: July 18, 2018 at 3:48:00 AM UTC+1
let createdAt = +doc.data().created_at;

const oneDay = 60 * 60 * 24;
var compareDatesBoolean = (now - createdAt) > oneDay;

这里的任何指导都会非常感谢您! :)

【问题讨论】:

  • doc.data().created_at 是 js 日期对象还是字符串?
  • 好问题。 Firebase 时间戳。
  • (Firebase Timestamp 是一个带有方法 toDate() 的对象。)
  • 您当前的代码有什么问题?它会在某些日期引发错误或返回错误的结果吗?

标签: javascript date


【解决方案1】:

为一小时创建示例参考此然后将其更改为 24 小时

const OneHourAgo= (date) => {
    const hour= 1000 * 60 * 60;
    const hourago= Date.now() - hour;

    return date > hourago;
}

简单一:-

var OneDay = new Date().getTime() + (1 * 24 * 60 * 60 * 1000)
                                     day hour  min  sec  msec
if (OneDay > yourDate) {
    // The yourDate time is less than 1 days from now
}
else if (OneDay < yourDate) {
    // The yourDate time is more than 1 days from now
}

【讨论】:

  • 可以不用像(24*60*60*1000)这样的1来简化
【解决方案2】:

在这种情况下使用 moment 会容易得多,你可以试试这个:

    let hours = moment().diff(moment(yourDateString), 'hours');
    let days = moment().diff(moment(yourDateString), 'days');

它将为您提供整数值,例如 1、2、5、0 等,因此您可以轻松地使用条件检查,例如:

if(hours >= 24) { your code }

if(days >= 1) { your code }

另外,还有一件事是您可以获得更准确的时间差结果(以十进制形式,如 1.2、1.5、0.7 等)来获得这种结果,我们需要传递第三个参数,即对于精确结果来说,使用这个语法:

let hours = moment().diff(moment(yourDateString), 'hours', true);

如果您有任何疑问,请告诉我

【讨论】:

    【解决方案3】:

    添加此const oneday = 60 * 60 * 24 * 1000 (milliseconds)。因为,JS 将 2 个 Datetime 对象之间的差异转换为毫秒。我认为这应该有效

    【讨论】:

    • 这似乎有效! - 感谢大家的回复。非常感谢。
    【解决方案4】:

    也许是这样的?

    const now = Date.now();
    
    // if it's a firebase timestamp
    const createdAt = doc.data().created_at.toMillis(); 
    
    const oneDay = 24 * 60 * 60 * 1000;
    
    const isMoreThanADay = (now - createdAt) > oneDay;
    

    我不知道firebase timestamps 我依赖toMillis 方法的文档。

    【讨论】:

    • 请记住,旧日期会失败,因为您没有使用内置日期比较器。
    【解决方案5】:

    如果您想检查数据库中的任何日期(以 mysql 格式或任何其他格式)不超过过去 24 小时(如果过期重置密码链接),您可以使用以下逻辑,在我的情况下 user.passwordTokenTimestamp 是值保存在数据库中

    let now = +new Date();
    let createdAt = +new Date(Date.parse(user.passwordTokenTimestamp.toString()));
    var oneDay = 24 * 60 * 60 * 1000;
    
    if ((now - createdAt) > oneDay) {
      const errors = {
        User: 'Password reset token has expired, please resend forgot password email !',
      };
      throw new HttpException({ errors }, HttpStatus.UNPROCESSABLE_ENTITY);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-02
      • 1970-01-01
      • 2023-03-19
      • 2012-02-24
      • 2014-04-20
      • 1970-01-01
      • 2021-07-12
      • 2023-03-12
      相关资源
      最近更新 更多