如何在给定日期和时间的情况下让一天倒退 24 小时?
Posted
技术标签:
【中文标题】如何在给定日期和时间的情况下让一天倒退 24 小时?【英文标题】:How to make a day go 24 hours back given date and a time? 【发布时间】:2016-01-07 03:42: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
的格式上
【参考方案1】:
如果您要使用 Moment,您可以将您的 _24_hours_before_event
变量设置为以下内容:
moment(eventTime).subtract(1, 'days').toDate();
如果您进行大量日期处理,可能值得考虑。
您可以查看full documentation here。
【讨论】:
如果有人需要momentjs
只是为了从日期对象中减去 24 小时,他们需要放弃编程并开始编织篮子
我认为你不需要粗鲁。以上是关于如何在给定日期和时间的情况下让一天倒退 24 小时?的主要内容,如果未能解决你的问题,请参考以下文章