timable
extend racket’s various time/date libs and make them be able to work together more smoothly.
source code: https://gitlab.com/yanyingwang/timable
notes: This lib is very experimental and not stable, I may change the procedure names along with the time of learning racket lang.
1 Procedures extended from srfi/19
(require timable/srfi) | package: timable |
> (require srfi/19) > (require timable/srfi) > (hours-ago 5) (date* 6 14 5 13 12 2019 5 346 #f -25200 323000000 "")
> (time-in-range? (current-time) (hours-ago/time 1) (hours-from-now/time 1)) #t
> (last-oclock (current-date)) (date* 0 0 10 13 12 2019 5 346 #f -25200 0 "")
> (last-oclock/time (current-time)) (tm:time 'time-utc 0 1576256400)
> (oclocks-between (hours-ago 2) (hours-ago 5))
(list
(date* 0 0 5 13 12 2019 5 346 #f -25200 0 "")
(date* 0 0 6 13 12 2019 5 346 #f -25200 0 "")
(date* 0 0 7 13 12 2019 5 346 #f -25200 0 "")
(date* 0 0 8 13 12 2019 5 346 #f -25200 0 ""))
> (oclocks-between/time (hours-ago/time 2) (hours-ago/time 5))
(list
(tm:time 'time-utc 0 1576238400)
(tm:time 'time-utc 0 1576242000)
(tm:time 'time-utc 0 1576245600)
(tm:time 'time-utc 0 1576249200))
> (beginning-date (current-date)) (date* 0 0 0 13 12 2019 5 346 #f -25200 0 "")
> (beginning-date/month (current-date)) (date* 0 0 0 1 12 2019 0 334 #f -25200 0 "")
> (beginning-date/year (current-date)) (date* 0 0 0 1 1 2019 2 0 #f -25200 0 "")
> (date->string (date-parse "2018-01-01 11:11:11 +0800")) "Mon Jan 01 11:11:11+0800 2018"
> (date->string (date-parse "2018/01/01 12")) "Mon Jan 01 12:00:00-0700 2018"
value
unix-epoch-date : date?
procedure
n : number?
procedure
n : number?
procedure
(time-in-range? time1 time2 time3) → boolean?
time1 : time? time2 : time? time3 : time?
procedure
(time-in-range<>? time1 time2 time3) → boolean?
time1 : time? time2 : time? time3 : time?
procedure
(time-in-range==? time1 time2 time3) → boolean?
time1 : time? time2 : time? time3 : time?
procedure
(time-in-range=<>=? time1 time2 time3) → boolean?
time1 : time? time2 : time? time3 : time?
procedure
(time-in-range=<>? time1 time2 time3) → boolean?
time1 : time? time2 : time? time3 : time?
procedure
(time-in-range<>=? time1 time2 time3) → boolean?
time1 : time? time2 : time? time3 : time?
procedure
(oclocks-between/time t1 t2) → list?
t1 : time? t2 : time?
procedure
(time-utc->date->string t [format-string]) → string?
t : time? format-string : string? = "~c"
2 Procedures extended from gregor
(require timable/gregor) | package: timable |
> (require timable/gregor) > (current-date) #<date 2019-12-13>
> (current-datetime) #<datetime 2019-12-13T10:14:06.680801025>
> (current-moment) #<moment 2019-12-13T10:14:06.682009033-07:00[America/Denver]>
> (current-moment/utc) #<moment 2019-12-13T17:14:06.683137939Z[Etc/UTC]>
> (require gregor) > (prev-day (now)) #<datetime 2019-12-12T10:14:06.685215088>
> (prev-month (now)) #<datetime 2019-11-13T10:14:06.6865979>
> (next-month (now)) +months: arity mismatch;
the expected number of arguments does not match the given
number
expected: 2 plus an optional argument with keyword
#:resolve-offset
given: 1
arguments...:
#<datetime 2019-12-13T10:14:06.688155029>
> (prev-year (now)) #<datetime 2018-12-13T10:14:06.688954102>
> (at-beginning/month (now)) #<datetime 2019-12-01T00:00:00>
> (at-end/month (now)) #<datetime 2019-12-31T23:59:59.999999999>
> (at-beginning/day (now)) #<datetime 2019-12-13T00:00:00>
> (at-end/year (now)) #<datetime 2019-12-31T23:59:59.999999999>
procedure
(->utc-offset/hours m) → number?
m : moment?
procedure
(current-date) → date?
procedure
(current-datetime) → datetime?
procedure
(current-moment) → moment?
procedure
(current-moment/utc) → moment?
procedure
(at-beginning/day d) → (or/c datetime? moment?)
d : (or/c datetime? moment?)
procedure
(at-end/day d) → (or/c datetime? moment?)
d : (or/c datetime? moment?)
3 Procedures converting date/time types
(require timable/convert) | package: timable |
> (require gregor) > (->sql-timestamp (today)) (sql-timestamp 2019 12 13 0 0 0 0 #f)
> (->sql-timestamp (now)) (sql-timestamp 2019 12 13 10 14 6 990811035 #f)
> (->sql-timestamp (now/moment)) (sql-timestamp 2019 12 13 10 14 6 992886963 -7)
> (->sql-timestamp (now)) (sql-timestamp 2019 12 13 10 14 6 993774902 #f)
> (->sql-timestamp (now/moment #:tz "Asia/Shanghai")) (sql-timestamp 2019 12 14 1 14 6 994632080 8)
> (today/sql) (sql-date 2019 12 13)
> (now/sql) (sql-timestamp 2019 12 13 10 14 6 995774902 #f)
> (now/moment/sql #:tz "Asia/Shanghai") (sql-timestamp 2019 12 13 10 14 6 996711914 -7)
procedure
(date->sql-timestamp d) → sql-timestamp?
d : date?
procedure
(datetime->sql-timestamp d) → sql-timestamp?
d : datetime?
procedure
(moment->sql-timestamp d) → sql-timestamp?
d : moment?
procedure
(->sql-timestamp d) → sql-timestamp?
d : (or/c date? datetime? moment?)
procedure
(current-datetime/sql d) → sql-timestamp?
d : datetime?
procedure
(current-moment/sql d) → sql-timestamp?
d : moment?
4 Changelog
add now/sql now/moment/sql today/sql ... to convert lib.
rename timeless to timable and add support to gregor and sql-timestamp.
splited from chive and name it to timeless only support srfi/19 lib.
refactor chive from chez scheme version to racket.