我正在我的应用程序中构建一个功能,允许将事件安排到未来。IE:事件发生在每周三下午6:30。我需要根据今天的当前日期向用户显示下周三是什么时候。
如果今天是2018年12月6日星期四,则需要向用户显示下一个事件是“2018年12月12日星期三下午6:30”
如果今天是“2019年1月8日星期二”,则需要向用户显示下一个事件是“2019年1月9日星期三下午6:30”
事件的原始开始日期在我的数据库中被捕获为正在进行的系列的第一天。2018年9月10日星期三。我正在用这个开始日期来尝试和计算每个下周三。
function nextEvent(cEvent) {
var startDate = cEvent.ceDate+ ", " +cEvent.ceTime ;
var ceDate = new Date(startDate) ;
var curDate = new Date() ;
var timeDiff = Math.abs(curDate.getTime() - ceDate.getTime()) ;
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)) ;
var addDays = Math.ceil(diffDays / 7) * 7 ;
var futureDate = ceDate.setDate(ceDate.getDate() + addDays) ;
var futureEvent = ceDate.format('D, M d, Y @ g:i a') ;
return futureEvent ;
}
}
// this date object START event is Wed Sept 10, 2018
var dObject = {"ceDate":"2018-09-10","ceTime":"18:30:00"}
var nextDate = nextEvent(dObject) ;
我正在循环几个事件,所有事件都使用不同的开始日期(即:ceDate),而NEXT事件显示错误的第二天。上面的示例(在dObject中硬编码)显示Mon Dec 10, 2018
,而它应该显示Wed Dec 12, 2018
。
同样,如果今天是星期三下午6点,下一个事件仍然需要显示为今天下午6:30。事件持续至少2小时...所以理想情况下,我还想弄清楚如何显示如下内容:Next Event: happening now til 8:30pm
3条答案
按热度按时间9vw9lbht1#
使用moment,不要尝试编写自己的日期函数,它只用于简单的计算。
https://momentjs.com/
Find next instance of a given weekday (ie. Monday) with moment.js
tjrkku2a2#
你的代码有很多问题。
那么
将构建类似"2018 - 09 - 10,18:30:00"的字符串,ECMAScript不支持该格式,因此当您这样做时:
结果取决于实现,并且很可能导致无效的日期。
下一篇:
似乎试图获得两个日期之间的天数差异,但它不适应时间组件,因此3 Nov 09:00到3 Nov 09:01将是1天,即使它是在同一天,只有1分钟后。
无论如何,考虑到你确定每周事件下一次发生的要求,你可以得到本周的事件,如果它通过了,增加7天,例如。
源对象需要有重复周期单位和倍数。我已经添加了这些,但没有使用它们,你应该能够看到它去哪里。你还需要有增加和减少小时,天,月等函数。利用它们。有很多问题和答案在这里已经对这些主题。
如果我正在设计一个重复发生的事件对象,它将比上面的方法拥有更多的信息来处理各种场景。
uxhixvfz3#
假设您的数据库中只有一周中的几天和开始时间,例如:周一16:00和周三18:30和周五17:00
在我的例子中,我将数据库中的数据(星期几和时间)转换为数字,并将它们放入一个数组中,以便获得前一个和下一个值
因为我们有事件的星期几,所以我们可以调用函数从days_arr中获取given_day的下一个/上一个值
这可以帮助您根据星期几定义下一个和上一个事件日期
我只知道还剩多少天,我知道我没有深究还剩多少时间,我希望这对你有帮助。