diff --git a/src/database.py b/src/database.py index a7aaed5..47f7567 100644 --- a/src/database.py +++ b/src/database.py @@ -203,7 +203,7 @@ class CalendarDatabase(object): username = self.tokenOper_get_username(token) self.cursor.execute('SELECT calendar.* FROM calendar INNER JOIN collection \ ON collection.ccn_uuid = calendar.ccn_belongTo \ - WHERE (collection.ccn_user = ? AND calendar.ccn_loopDateTimeEnd >= ? AND calendar.ccn_loopDateTimeStart <= ?);', + WHERE (collection.ccn_user = ? AND calendar.ccn_loopDateTimeEnd >= ? AND calendar.ccn_loopDateTimeStart - (calendar.ccn_eventDateTimeEnd - calendar.ccn_eventDateTimeStart) <= ?);', (username, startDateTime, endDateTime)) return self.cursor.fetchall() @@ -212,7 +212,7 @@ class CalendarDatabase(object): username = self.tokenOper_get_username(token) self.cursor.execute('SELECT calendar.ccn_uuid FROM calendar INNER JOIN collection \ ON collection.ccn_uuid = calendar.ccn_belongTo \ - WHERE (collection.ccn_user = ? AND calendar.ccn_loopDateTimeEnd >= ? AND calendar.ccn_loopDateTimeStart <= ?);', + WHERE (collection.ccn_user = ? AND calendar.ccn_loopDateTimeEnd >= ? AND calendar.ccn_loopDateTimeStart - (calendar.ccn_eventDateTimeEnd - calendar.ccn_eventDateTimeStart) <= ?);', (username, startDateTime, endDateTime)) return tuple(map(lambda x: x[0], self.cursor.fetchall())) diff --git a/src/static/js/datetime.js b/src/static/js/datetime.js index 269e4d5..879f672 100644 --- a/src/static/js/datetime.js +++ b/src/static/js/datetime.js @@ -112,9 +112,9 @@ function ccn_datetime_ResolveLoopRules4Event(loopRules, loopDateTimeStart, loopD var isSpecial = (originalMonth == 2 && originalDay == 29); var realLoopSpan = isSpecial ? LCM(4, loopSpan) : loopSpan; - var fullSpanCount = Math.floor(yearCount / realLoopSpan); + //var fullSpanCount = Math.floor(yearCount / realLoopSpan); var remainYear = year % realLoopSpan; - detectDateTime.setUTCFullYear(fullSpanCount + detectDateTime.getUTCFullYear(), 1, 1); + //detectDateTime.setUTCFullYear(fullSpanCount + detectDateTime.getUTCFullYear(), 1, 1); if (remainYear != 0) detectDateTime.setUTCFullYear(realLoopSpan - remainYear + detectDateTime.getUTCFullYear(), 1, 1); @@ -138,9 +138,9 @@ function ccn_datetime_ResolveLoopRules4Event(loopRules, loopDateTimeStart, loopD var monthsCount = ccn_datetime_MonthsCount(detectDateTime.getUTCFullYear(). detectDateTime.getUTCMonth() + 1) - ccn_datetime_MonthsCount(originalYear, originalMonth); - var fullSpanCount = Math.floor(monthsCount / loopSpan); + //var fullSpanCount = Math.floor(monthsCount / loopSpan); var remainMonth = monthsCount % loopSpan; - detectDateTime.setUTCMonth(fullSpanCount * loopSpan + detectDateTime.getUTCMonth(), 1); + //detectDateTime.setUTCMonth(fullSpanCount * loopSpan + detectDateTime.getUTCMonth(), 1); if (remainMonth != 0) detectDateTime.setUTCMonth(loopSpan - remainMonth + detectDateTime.getUTCMonth(), 1); @@ -193,11 +193,11 @@ function ccn_datetime_ResolveLoopRules4Event(loopRules, loopDateTimeStart, loopD var daysCount = ccn_datetime_DaysCount(detectDateTime.getUTCFullYear(), detectDateTime.getUTCMonth() + 1, detectDateTime.getDate()) - ccn_datetime_DaysCount(originalYear, originalMonth, originalDay); - var fullSpanCount = Math.floor(daysCount / (7 * loopSpan)); + //var fullSpanCount = Math.floor(daysCount / (7 * loopSpan)); var remainFullSpanCount = Math.floor((daysCount % (7 * loopSpan)) / 7); var remainDays = (daysCount % (7 * loopSpan)) % 7; - detectDateTime.setUTCDate((7 * loopSpan * fullSpanCount) + detectDateTime.getUTCDate()); + //detectDateTime.setUTCDate((7 * loopSpan * fullSpanCount) + detectDateTime.getUTCDate()); if (remainFullSpanCount != 0) { detectDateTime.setUTCDate((loopSpan - remainFullSpanCount) * 7 + detectDateTime.getUTCDate()); } @@ -219,11 +219,11 @@ function ccn_datetime_ResolveLoopRules4Event(loopRules, loopDateTimeStart, loopD } else if (ccn_datetime_precompiledLoopRules.day.test(loopRules)) { var loopSpan = parseInt(RegExp.$1); - var daysCount = ccn_datetime_DaysCount(detectDateTime.getUTCFullYear(), detectDateTime.getUTCMonth() + 1, detectDateTime.getDate()) - + var daysCount = ccn_datetime_DaysCount(detectDateTime.getUTCFullYear(), detectDateTime.getUTCMonth() + 1, detectDateTime.getUTCDate()) - ccn_datetime_DaysCount(originalYear, originalMonth, originalDay); - var fullSpanCount = Math.floor(daysCount / loopSpan); + //var fullSpanCount = Math.floor(daysCount / loopSpan); var remainDays = daysCount % loopSpan; - detectDateTime.setUTCDate(fullSpanCount * loopSpan + detectDateTime.getUTCDate()); + //detectDateTime.setUTCDate(fullSpanCount * loopSpan + detectDateTime.getUTCDate()); if (remainDays != 0) detectDateTime.setUTCDate(loopSpan - remainDays + detectDateTime.getUTCDate()); diff --git a/src/static/js/page/calendar.js b/src/static/js/page/calendar.js index 49fb118..db8cc84 100644 --- a/src/static/js/page/calendar.js +++ b/src/static/js/page/calendar.js @@ -118,9 +118,10 @@ function ccn_calendar_calendar_Analyse() { for(var index in ccn_calendar_calendar_listCache) { var item = ccn_calendar_calendar_listCache[index]; + var minStartTimestamp = startTimestamp - (item[6] - item[5]); var result = ccn_datetime_ResolveLoopRules4Event( item[8], - Math.max(item[6] - item[5] + startTimestamp, item[9]), + item[9] < minStartTimestamp ? minStartTimestamp : item[9], Math.min(item[10], endTimestamp), item[5], item[6],