【发布时间】:2018-06-12 15:05:41
【问题描述】:
我有一个 JavaScript/数学问题。 我现在被一项任务困了两天,我想我完全是白痴,因为我无法弄清楚...Screenshot
我正在创建一个从早上 7 点到晚上 8 点轮班的周历。但我可以有 2 天(或更多)的轮班。
问题是我可以将日历事件拖放到日历上,然后我需要从 dateFrom 计算新的 dateTo,该 dateFrom 是从我放置它的 div 中获得的。
问题是,当我尝试将项目拖放到另一个时间时,我需要将 dateFrom 放置到每当我拖动它时,但是我需要计算小时数,所以我得到相同的时间,但问题是当活动持续多天时,我需要活动在早上 7 点之后完成下一次约会,而不是在半夜。例如,我从下午 3 点到第二天下午 5 点有活动,然后我把它移到了第二天晚上 7 点,所以我需要活动在第二天早上 9 点结束。
是否有人对此有相同的问题或解决方案? 希望有道理,非常感谢。
这是我现在使用的代码,它几乎可以工作,但有时我得到错误的日期/时间(通常它会从日期删除 10 小时)。
export function getCorrectDateAfterDrop(originalDateFrom, originalDateTo, dateFrom) {
const NIGHT_TIME = 11;
dateFrom = moment(dateFrom);
originalDateTo = moment(originalDateTo);
originalDateFrom = moment(originalDateFrom);
let hoursDiff = moment.duration(originalDateTo.diff(originalDateFrom)).asHours();
const sign = Math.sign(hoursDiff);
if (originalDateTo.isAfter(moment(originalDateFrom).hours(20))) {
hoursDiff = (hoursDiff > NIGHT_TIME) ? (hoursDiff - NIGHT_TIME) : hoursDiff;
}
let finalDateToBeChecked = moment(dateFrom).add((hoursDiff * sign), 'hours');
let isDateFromSameAsDateTo = moment(dateFrom).isSame(finalDateToBeChecked, 'day');
if (isDateFromSameAsDateTo && finalDateToBeChecked.hours() < 20) {
// I think the problem is here, but I can't figure it out :D
return finalDateToBeChecked.format();
} else {
const diffUntilShiftEnds = moment.duration(moment(dateFrom).hours(20).diff(dateFrom)).asHours();
hoursDiff -= diffUntilShiftEnds;
const finalDateFrom = moment(dateFrom).add(1, 'days').hours(7);
const finalDateTo = moment(dateFrom).add(1, 'days').hours(7).add(hoursDiff, 'hours');
return getCorrectDateAfterDrop(finalDateFrom, finalDateTo, finalDateFrom);
}
}
【问题讨论】:
标签: javascript reactjs momentjs