9.0
top
← prev up next →

timable🔗 i

Yanying Wang <yanyingwang1@gmail.com>

(require timable ) package: timable

This library provides a bundle of extended functions for racket’s various time/date libs.

  • source code: https://github.com/yanyingwang/timable

  • Since this lib is not very stable, I may change the interfaces along with my learning of racket lang, you’d better specify this pkg with the git commit id such as: https://github.com/yanyingwang/timable#a6c610de02336a0f0858e50ce5f016bd82b79b8a.
    Check more at Package Sources.

  • Please use gregor instead of srfi/19 if possible, since this lib is tightly sticking with gregor.

  • (requiretimable) is same as (requiretimable/gregortimable/convert).

1Extended gregor🔗 i

1.1from base gregor🔗 i

Procedures that extended from Gregor: Dates and Times.

Examples:
> (require timable/gregor
gregor)

#<datetime 2025年11月22日T19:21:57.41484668>

> (prev-day (now ))

#<datetime 2025年11月21日T19:21:57.419439209>

#<datetime 2025年11月01日T00:00:00>

> (parse/datetime "2018-02-14 12:30:45")

#<datetime 2018年02月14日T12:30:45>

procedure

( current-date )date?

procedure

( current-datetime )datetime?

procedure

( current-datetime/utc )moment?

procedure

( current-moment )moment?

procedure

( current-moment/utc )moment?

current-date is an alias procedure of today .
current-datetime is an alias procedure of now .
current-datetime/utc is an alias procedure of now/utc .
current-moment is an alias procedure of now/moment .
current-moment/utc is an alias procedure of now/moment/utc .

Examples:

#<date 2025年11月22日>

#<datetime 2025年11月22日T19:21:57.719550049>

#<moment 2025年11月22日T19:21:57.720434082Z[UTC]>

#<moment 2025年11月22日T19:21:57.721648926Z[Etc/UTC]>

procedure

( years-ago n)datetime?

procedure

( months-ago n)datetime?

procedure

( days-ago n)datetime?

procedure

( hours-ago n)datetime?

procedure

( years-ago/utc n)datetime?

procedure

( months-ago/utc n)datetime?

procedure

( days-ago/utc n)datetime?

procedure

( hours-ago/utc n)datetime?

Examples:
> (now )

#<datetime 2025年11月22日T19:21:57.985726074>

> (hours-ago 1)

#<datetime 2025年11月22日T18:21:57.987160645>

> (months-ago 3)

#<datetime 2025年08月22日T19:21:58.024707275>

> (years-ago 1)

#<datetime 2024年11月22日T19:21:58.026301025>

#<datetime 2025年11月22日T18:21:58.027917969>

Examples:
> (now )

#<datetime 2025年11月22日T19:21:58.293885742>

#<datetime 2025年11月22日T20:21:58.295253174>

procedure

( prev-day t)(or/c date? time?datetime? moment? )

procedure

( next-day t)(or/c date? time?datetime? moment? )

procedure

( prev-month t)(or/c date? time?datetime? moment? )

procedure

( next-month t)(or/c date? time?datetime? moment? )

procedure

( prev-year t)(or/c date? time?datetime? moment? )

procedure

( next-year t)(or/c date? time?datetime? moment? )

Examples:
> (now )

#<datetime 2025年11月22日T19:21:58.561538818>

> (prev-year (now ))

#<datetime 2024年11月22日T19:21:58.56304248>

Examples:
> (now )

#<datetime 2025年11月22日T19:21:58.771481689>

#<datetime 2025年11月22日T00:00:00>

#<datetime 2025年11月01日T00:00:00>

#<datetime 2025年11月30日T23:59:59.999999999>

procedure

( ->utc-offset/hours m)number?

Return a number stands for the utc offset hours. While ->utc-offset returns the seconds.

Examples:

#<moment 2025年11月22日T19:21:59.063182617Z[UTC]>

0

procedure

( parse/datetime str)datetime?

str:string?
Parse str and return a datetime for it.

Examples:
> (parse/datetime "2018-02-14 12:30:45")

#<datetime 2018年02月14日T12:30:45>

> (parse/datetime "2018/02-14 12-30 45")

#<datetime 2018年02月14日T12:30:45>

1.2from converting between sql and gregor🔗 i

Functions that converting between MySQL Types and Gregor: Dates and Times.

Examples:
> (require gregor)

(sql-timestamp 2025 11 22 0 0 0 0 #f)

> (today/sql )

(sql-date 2025 11 22)

Convert d from gregor moment to sql-timestamp.

Examples:

(sql-timestamp 2025 11 22 0 0 0 0 #f)

(sql-timestamp 2025 11 22 19 21 59 743154785 #f)

(sql-timestamp 2025 11 22 19 21 59 746148438 0)

(sql-timestamp 2025 11 22 19 21 59 747424316 #f)

> (->sql-timestamp (now/moment #:tz"Asia/Shanghai"))

(sql-timestamp 2025 11 23 3 21 59 749553223 8)

Use current-datetime/sql as an alias of now/sql to return now in sql-timestamp type.
Use current-moment/sql as an alias of now/moment/sql to return now/moment in sql-timestamp-tz type.
Use current-date/sql as an alias of today/sql to return today in sql-date type.

Examples:
> (today )

#<date 2025年11月22日>

> (today/sql )

(sql-date 2025 11 22)

> (now/sql )

(sql-timestamp 2025 11 22 19 22 0 15703369 #f)

> (now/moment/sql #:tz"Asia/Shanghai")

(sql-timestamp 2025 11 22 19 22 0 17087646 0)

2 Extended srfi/19🔗 i

Procedures that extended from SRFI 19: Time Data Types and Procedures.

Examples:
> (require srfi/19)
> (require timable/srfi)
> (hours-ago 5)

(date* 0 22 14 22 11 2025 6 325 #f 0 350000000 "")

#t

> (last-oclock (current-date))

(date* 0 0 19 22 11 2025 6 325 #f 0 0 "")

> (last-oclock/time (current-time))

(tm:time 'time-utc 0 1763838000)

(list

(date* 0 0 14 22 11 2025 6 325 #f 0 0 "")

(date* 0 0 15 22 11 2025 6 325 #f 0 0 "")

(date* 0 0 16 22 11 2025 6 325 #f 0 0 "")

(date* 0 0 17 22 11 2025 6 325 #f 0 0 ""))

(list

(tm:time 'time-utc 0 1763820000)

(tm:time 'time-utc 0 1763823600)

(tm:time 'time-utc 0 1763827200)

(tm:time 'time-utc 0 1763830800))

> (beginning-date (current-date))

(date* 0 0 0 22 11 2025 6 325 #f 0 0 "")

> (beginning-date/month (current-date))

(date* 0 0 0 1 11 2025 6 304 #f 0 0 "")

> (beginning-date/year (current-date))

(date* 0 0 0 1 1 2025 3 0 #f 0 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:00Z 2018"

value

unix-epoch-time:time?

returns the unix epoch time, which is 1970年01月01日T00:00:00Z.

value

unix-epoch-date:date?

returns the unix-epoch-time in date type.

procedure

( hours-ago n)date?

an alias procedure of hours-ago/date

procedure

( hours-ago/time n)time?

returns a time of n hours ago.

procedure

( hours-ago/date n)date?

returns a date of n hours ago.

procedure

( hours-from-now n)date?

an alias procedure of hours-from-now/date

procedure

( hours-from-now/time n)time?

returns a time of n hours from now on.

procedure

( hours-from-now/date n)date?

returns a date of n hours from now on.

procedure

( time-in-range? time1time2time3)boolean?

time1:time?
time2:time?
time3:time?
an alias procedure of time-in-range<>?

procedure

( time-in-range<>? time1time2time3)boolean?

time1:time?
time2:time?
time3:time?
Is time1 in the range of time2 and time3?

procedure

( time-in-range==? time1time2time3)boolean?

time1:time?
time2:time?
time3:time?
an alias procedure of time-in-range=<>=?

procedure

( time-in-range=<>=? time1time2time3)boolean?

time1:time?
time2:time?
time3:time?
Is time1 in the range of time2 and time3(is in if time1 equals time2 or time3)?

procedure

( time-in-range=<>? time1time2time3)boolean?

time1:time?
time2:time?
time3:time?
Is time1 in the range of time2 and time3(is in if time1 equals time2)?

procedure

( time-in-range<>=? time1time2time3)boolean?

time1:time?
time2:time?
time3:time?
Is time1 in the range of time2 and time3(is in if time1 equals time3)?

procedure

( beginning-date d)date?

d:date?
beginning-date is an alias procedure of beginning-date/day .

procedure

( beginning-date/day d)date?

d:date?
beginning-date/day returns a new date which is the first date of the day of d.

procedure

( beginning-date/month d)date?

d:date?
beginning-date/month returns a new date which is the first date of the month of d.

procedure

( beginning-date/year d)date?

d:date?
beginning-date/year returns a new date which is the first date of the year of d.

procedure

( end-date d)date?

d:date?
end-date is an alias procedure of end-date/day .

procedure

( end-date/day d)date?

d:date?
end-date/day returns a new date which is the end date of the day of d.

procedure

( end-date/month d)date?

d:date?
end-date/month returns a new date which is the end date of the month of d.

procedure

( end-date/year d)date?

d:date?
end-date/year returns a new date which is the endt date of the year of d.

procedure

( previous-date/day d)date?

d:date?
returns a new date which is the same date of yesterday of d.

procedure

( date-parse str)date?

str:string?
try to returns a date with parsing the string str.

procedure

( previous-date/month d)date?

d:date?
returns a new date which is the same date of last month of d.

procedure

( last-oclock/time d)time?

d:time?
returns a new time which is the recently last oclock time of d.

procedure

( last-oclock/date d)date?

d:date?
returns a new date which is the recently last oclock time of d.

procedure

( last-oclock d)date?

d:date?
an alias procedure of last-oclock/date .

procedure

( oclocks-between d1d2)list?

d1:date?
d2:date?
an alias procedure of oclocks-between/date .

procedure

( oclocks-between/time t1t2)list?

t1:time?
t2:time?
returns a list of all the time oclocks between t1 and t2.

procedure

( oclocks-between/date d1d2)list?

d1:date?
d2:date?
returns a list of all the date oclocks between d1 and d2.

procedure

( time-utc->date->string t[format-string])string?

t:time?
format-string:string? ="~c"
convert the time to date and then to string with format-string of PLT-specific extensions(string->date).

procedure

( time-utc->string t[format-string])string?

t:time?
format-string:string? ="~c"
an alias procedure of time-utc->date->string .

3Change Logs🔗 i

  • at-end/on-month. –2020年02月04日

  • enh docs for gregor. –2020年02月03日

  • version 0.2.0

  • add parse/datetime to gregor lib. –2019年12月16日

  • 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.

top
← prev up next →

AltStyle によって変換されたページ (->オリジナル) /