【问题标题】:How to make a day go 24 hours back given date and a time?如何在给定日期和时间的情况下让一天倒退 24 小时?
【发布时间】:2026-02-17 16:55:02
【问题描述】:

我不熟悉通知以及处理日期和时间。我已经尝试找到类似我的东西,但我找不到任何改变时间而不仅仅是日期的东西。

var eventTime = Event.date;
var _24_hours_before_event = new Date(eventTime - 86400000);

cordova.plugins.notification.local.schedule({
    id: Math.floor(Math.random() * Number.MAX_VALUE) + 1,
    title: Event.title + "is in 24 hours",
    text: Event.description,
    at: _24_hours_before_event,
    data: {
        eventId: Event._id,
        time: 24
    }
});

如您所见,我正在尝试向用户发送通知,警告他们将在 24 小时内发生事件。现在它知道何时发送通知的方式是用户输入一个时间,保存在 Event.date 中。然后,给定那个时间,它将减去 24 小时(这就是我坚持的部分)。 Event.date 看起来像这样 2016-01-09T14:00:00.000Z。我试着做这样的事情 Date(eventTime - 86400000),但没有奏效。我需要帮助的是如何让这个 2016-01-09T14:00:00.000Z 回到一整天。应该看起来像这样 2016-01-08T14:00:00.000Z。另外,要明确一点,如果时间是 2013 年 1 月 6 日凌晨 5:00,那么我希望通知显示在 2013 年 1 月 5 日凌晨 5:00。感谢您的帮助。

解决方案

我发现 2016-01-08T14:00:00.000Z 或 Event.date 是字符串而不是整数。我把它变成整数的方法是像这样new Date(Event.date)

var eventTime = new Date(Event.date);
var _24_hours_before_event = new Date(eventTime.getTime() - 86400000);

cordova.plugins.notification.local.schedule({
   id: Math.floor(Math.random() * Number.MAX_VALUE) + 1,
   title: Event.title + "is in 24 hours",
   text: Event.description,
   at: _24_hours_before_event,
   data: {
       eventId: Event._id,
       time: 24
   }
});

我还添加了 .getTime(),因此可以从给定的日期中减去 86400000。

【问题讨论】:

  • but that didn't work - 它以什么方式不起作用? 86400000ms 是一天,所以你的数学是正确的。请详细说明您认为这不起作用的原因
  • 当我的意思是“它不起作用”时,我在谈论它没有在前一天发送通知。它根本没有发送它。 @JaromandaX
  • 所以这段代码在某种服务器上运行
  • ...哦,等等cordova.plugins.notification.local.schedule...没关系:p
  • 您能否确认 _24_hours_before_event 最终是一个有效的 Date 对象 - 如果不是,问题可能出在 Event.date 的格式上

标签: javascript date time push-notification localnotification


【解决方案1】:

如果您要使用 Moment,您可以将您的 _24_hours_before_event 变量设置为以下内容:

moment(eventTime).subtract(1, 'days').toDate();

如果您进行大量日期处理,可能值得考虑。

您可以查看full documentation here

【讨论】:

  • 如果有人需要 momentjs 只是为了从日期对象中减去 24 小时,他们需要放弃编程并开始编织篮子
  • 我认为你不需要粗鲁。
最近更新 更多