aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2020-04-25 23:12:15 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2020-04-25 23:12:15 +0200
commit93d909411a3a26cf2e65ecc87deff2bede4777f8 (patch)
treeea1bd2b6e37767cb8c69719965138ef441be7992
parentAdd exception handler to description filter. (diff)
downloadcalp-93d909411a3a26cf2e65ecc87deff2bede4777f8.tar.gz
calp-93d909411a3a26cf2e65ecc87deff2bede4777f8.tar.xz
Renormalize some dt's to local time, solving owerflow.
Previously, if a DTEND = 01:00+02:00, but was given in UTC (23:00Z) then the fact that DTEND was in different dates lead to some problems.
-rw-r--r--module/output/html.scm4
-rw-r--r--module/vcomponent/datetime.scm34
2 files changed, 20 insertions, 18 deletions
diff --git a/module/output/html.scm b/module/output/html.scm
index 5e09d30f..70c3b8a9 100644
--- a/module/output/html.scm
+++ b/module/output/html.scm
@@ -186,12 +186,12 @@
"unknown"))
,(when (and (attr ev 'PARTSTAT) (string= "TENTATIVE" (attr ev 'PARTSTAT)))
" tentative")
- ,(when (date<? (as-date (attr ev 'DTSTART)) date)
+ ,(when (date<? (as-date (get-datetime (attr ev 'DTSTART))) date)
" continued")
;; TODO all day events usually have the day after as DTEND.
;; So a whole day event the 6 june would have a DTEND of the
;; 7 june.
- ,(when (date<? date (as-date (attr ev 'DTEND)))
+ ,(when (date<? date (as-date (get-datetime (attr ev 'DTEND))))
" continuing"))
(style ,style))
(div (@ (class "event-inner"))
diff --git a/module/vcomponent/datetime.scm b/module/vcomponent/datetime.scm
index e389183f..d693782c 100644
--- a/module/vcomponent/datetime.scm
+++ b/module/vcomponent/datetime.scm
@@ -74,22 +74,24 @@ Event must have the DTSTART and DTEND attribute set."
;; to a datetime to allow for more explicit TZ handling?
(define-public (event-length/day date e)
;; TODO date= > 2 elements
- (cond [(and (date= (as-date (attr e 'DTSTART))
- (as-date (attr e 'DTEND)))
- (date= (as-date (attr e 'DTSTART))
- date))
- (time- (as-time (attr e 'DTEND))
- (as-time (attr e 'DTSTART)))]
- ;; Starts today, end in future day
- [(date= (as-date (attr e 'DTSTART))
- date)
- (time- #24:00:00 (as-time (attr e 'DTSTART)))]
- ;; Ends today, start earlier day
- [(date= (as-date (attr e 'DTEND))
- date)
- (as-time (attr e 'DTEND))]
- ;; start earlier date, end later date
- [else #24:00:00]))
+ (let ((start (get-datetime (attr e 'DTSTART)))
+ (end (get-datetime (attr e 'DTEND))))
+ (cond [(and (date= (as-date start)
+ (as-date end))
+ (date= (as-date start)
+ date))
+ (time- (as-time end)
+ (as-time start))]
+ ;; Starts today, end in future day
+ [(date= (as-date start)
+ date)
+ (time- #24:00:00 (as-time start))]
+ ;; Ends today, start earlier day
+ [(date= (as-date end)
+ date)
+ (as-time end)]
+ ;; start earlier date, end later date
+ [else #24:00:00])))
;; 22:00 - 03:00