aboutsummaryrefslogtreecommitdiff
path: root/module/vcalendar/datetime.scm
blob: 360b834825f3dc9e34c6e47cf64e87b37adbbf43 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(define-module (vcalendar datetime)
  #:use-module (vcalendar)
  #:use-module (srfi srfi-19)
  #:use-module (srfi srfi-19 util)

  #:export (parse-datetime
            event-overlaps?
            event-in?)
  )

(define (parse-datetime dtime)
  "Parse the given date[time] string into a date object."
  ;; localize-date
  (date->time-utc
   (string->date
    dtime
    (case (string-length dtime)
      ((8) "~Y~m~d")
      ((15) "~Y~m~dT~H~M~S")
      ((16) "~Y~m~dT~H~M~S~z")))))

(define (event-overlaps? event begin end)
  "Returns if the event overlaps the timespan.
Event must have the DTSTART and DTEND attribute set."
  (timespan-overlaps? (attr event 'DTSTART)
                      (attr event 'DTEND)
                      begin end))

(define (event-in? ev time)
  "Does event overlap the date that contains time."
  (let* ((date (time-utc->date time))
         (start (date->time-utc (drop-time date)))
         (end (add-duration start (make-duration (* 60 60 24)))))
    (event-overlaps? ev start end)))