Warning: Reason support is experimental. We are looking for beta-tester and contributors.

Module Os_date

module Os_date : sig..end

Time zone and date management for Web applications.

This module provides some useful functions to detect and manage time zones, print dates, etc.

It's essentially a wrapper to CalendarLib.Calendar.t through an abstract type and by using zone and date data provided by the browser. See calendar OCaml library for more information about CalendarLib module. Specifiers from calendar OCaml library are used: refer you to the official documentation (http://calendar.forge.ocamlcore.org/doc) to know the significations.


type local_calendar

Type representing a local calendar.

val to_utc : ?timezone:string -> local_calendar -> CalendarLib.Calendar.t

Convert a local calendar to a UTC calendar. Use the client's timezone unless the optional timezone argument is provided.

val to_local : ?timezone:string -> CalendarLib.Calendar.t -> local_calendar

Convert any type of calendar to a local calendar. Use the client's timezone unless the optional timezone argument is provided.

val now : ?timezone:string -> unit -> local_calendar

now () returns the current date as a local_calendar value. Use the client's timezone unless the optional timezone argument is provided.

val initialize : string -> unit

You can use initialize timezone to communicate the client's timezone to the client when the auto-initialization is disabled

val user_tz : unit -> string

user_tz () returns current user's timezone.

val to_local_time : local_calendar -> CalendarLib.Time.t

Convert a local_calendar value to a CalendarLib.Time.t value.

val to_local_date : local_calendar -> CalendarLib.Date.t

Convert a local_calendar value to a CalendarLib.Date.t value.

val local_to_calendar : local_calendar -> CalendarLib.Calendar.t

Convert a local_calendar value to a CalendarLib.Calendar.t value.

val local_from_calendar : CalendarLib.Calendar.t -> local_calendar

Convert a CalendarLib.Calendar.t value to a local_calendar value.

val unknown_timezone : unit -> bool

unknown_timezone () returns true if the timezone is unknown. Else returns false.

val smart_time : ?now:local_calendar -> local_calendar -> string

smart_time ~now date returns a smart description of local_date comparing to now (default value of now is the current time when the function is called). It does the same job than Os_date.smart_date but « at %hour » is added at the end where %hour is computed from Os_date.smart_hours_minutes.

val smart_date : ?now:local_calendar -> local_calendar -> string

smart_date ~now local_date returns a smart description of local_date comparing to now (default value of now is the current time when the function is called). Smart means

  • if local_date is the day before now, "Yesterday" is returned.
  • if local_date is the same day than now, "Today" is returned.
  • if local_date is the day after now, "Tomorrow" is returned.
  • if now and local_date has the same year, it returns the date in the format: "%A %B %d".
  • else the year is added at the end in the same format than the previous case.
val smart_hours_minutes : local_calendar -> string

smart_hours_minutes date returns the time in the format "%I:%M%P". If the timezone is unknown, GMT is added.

val smart_interval : 
  ?now:local_calendar ->
  local_calendar -> local_calendar -> string

smart_interval ?now start_date end_date returns a smart description of start_date comparing to end_date of the year, month, day, hour and minutes (compared to Os_date.smart_date_interval, information about the hour and minutes is given).

The year is not used if start_date and end_date or if start_date and now have the same year.

The final output is the concatenation of smart_start_date and smart_end_date with a dash between them.

smart_start_date and smart_end_date in in the format "%B %d, %Y" if year is needed and "%B %d" if not.

val smart_date_interval : 
  ?now:local_calendar ->
  local_calendar -> local_calendar -> string

smart_date_interval ?now start_date end_date returns a smart description of start_date comparing to end_date of the year, month and day (compared to Os_date.smart_interval, no information about the hour and minutes is given).

The year is not used if start_date and end_date or if start_date and now have the same year.

The final output is the concatenation of smart_start_date and smart_end_date with a dash between them. smart_start_date (resp. smart_end_date) is start_date (resp. end_date) in the format "%B %d, %Y, %I:%M%P" if year is needed and "%B %d, %I:%M%P" if not.