Code Monkey home page Code Monkey logo

cljs-time's Introduction

cljs-time Build Status

A date and time library for ClojureScript, immitating the clj-time library.

Cljs-time is an attempt at replicating the functionality in clj-time. This is not a drop-in clojurescript replacement for clj-time, however the goal is that over time enough functionality of the clj-time API can be replicated to make this library "good enough" for other projects.

This library is currently leaning on the Google Closure goog.date library for basic date/time functionality. The date objects in this library are mutable, however any operations that alter a date object return a copy, leaving the referenced date object alone. In the future, immutable date objects will be preferred.

Artifacts

cljs-time artifacts are released to Clojars.

If you are using Maven, add the following repository definition to your pom.xml:

<repository>
  <id>clojars.org</id>
  <url>http://clojars.org/repo</url>
</repository>

The Most Recent Release

With Leiningen:

[com.andrewmcveigh/cljs-time "0.2.4"]

Bugs and Enhancements

Please open issues against the cljs-time repo on Github.

Note: version 0.2. follows the API of clj-time 0.8.0.*

API

Most of the clj-time API has been implemented. Some of the parts that don't make sense in clojurescript, such as Java interop, and java.sql.* have been left out.

The majority of the tests from clj-time have been copied over, and are passing.

API documentation is available.

Usage

cljs-time.core

The main namespace for date-time operations in the cljs-time library is cljs-time.core.

=> (use 'cljs-time.core)

Create a DateTime instance with date-time, specifying the year, month, day, hour, minute, second, and millisecond:

=> (date-time 1986 10 14 4 3 27 456)
#<DateTime 1986-10-14T04:03:27.456Z>

Less-significant fields can be omitted:

=> (date-time 1986 10 14)
#<DateTime 1986-10-14T00:00:00.000Z>

Get the current time with (now) and the start of the Unix epoch with (epoch).

Once you have a date-time, use accessors like hour and second to access the corresponding fields:

=> (hour (date-time 1986 10 14 22))
22

The date-time constructor always returns times in the UTC time zone.

If you only want a date with no time component, consider using the local-date and today functions. These return LocalDate instances that do not have time components (and thus don't suffer from timezone-related shifting).

=> (local-date 2013 3 20)
#<LocalDate 2013-03-20>

The functions after? and before? determine the relative position of two DateTime instances:

=> (after? (date-time 1986 10) (date-time 1986 9))
true

Often you will want to find a date some amount of time from a given date. For example, to find the time 1 month and 3 weeks from a given date-time:

=> (plus (date-time 1986 10 14) (months 1) (weeks 3))
#<DateTime 1986-12-05T00:00:00.000Z>

An Interval is used to represent the span of time between two DateTime instances. Construct one using interval, then query them using within?, overlaps?, and abuts?

=> (within? (interval (date-time 1986) (date-time 1990))
            (date-time 1987))
true

The in-seconds and in-minutes functions can be used to describe intervals in the corresponding temporal units:

=> (in-minutes (interval (date-time 1986 10 2) (date-time 1986 10 14)))
17280

cljs-time.format

If you need to parse or print date-times, use cljs-time.format:

=> (use 'cljs-time.format)

Printing and printing are controlled by formatters. You can either use one of the built in ISO8601 formatters or define your own, e.g.:

(def built-in-formatter (formatters :basic-date-time))
(def custom-formatter (formatter "yyyyMMdd"))

To see a list of available built-in formatters and an example of a date-time printed in their format:

=> (show-formatters)

Remember that mm is minutes, MM is months, ss is seconds and SS is milliseconds.

Once you have a formatter, parsing and printing are straight-forward:

=> (parse custom-formatter "20100311")
#<20100311T000000>

=> (unparse custom-formatter (date-time 2010 10 3))
"20101003"

cljs-time.core/today-at returns a moment in time at the given hour, minute and second on the current date:

=> (today-at 12 00)
#<20130329T120000>
=> (today-at 12 00 05)
#<20130329T120005>

cljs-time.coerce

The namespace cljs-time.coerce contains utility functions for coercing Google Closure DateTime instances to and from various other types:

=> (use 'cljs-time.coerce)

For example, to convert a Joda DateTime to and from a Java long:

=> (to-long (date-time 1998 4 25))
893462400000

=> (from-long 893462400000)
#<19980425T000000>

And by the magic of protocols you can pass in an isoformat string and get the unix epoch milliseconds:

=> (to-long "2013-08-01")
1375315200000

Development

Running the tests:

$ lein test-all

(assumes Leiningen 2.x)

Documentation

The complete API documentation is also available (marginalia generated).

License

Copyright © 2013 Andrew Mcveigh

Distributed under the Eclipse Public License, the same as Clojure.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.