npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@js-joda/core

v5.6.3

Published

a date and time library for javascript

Downloads

7,316,498

Readme

Immutable date and time library for JavaScript

npm version GH Actions Build Status Sauce Test Status Coverage Status Downloads/Month

Sauce Browser Matrix

Introduction

js-joda is an immutable date and time library for JavaScript. It provides a simple, domain-driven and clean API based on the ISO calendar system, which is the de facto world calendar following the proleptic Gregorian rules.

  • js-joda has a lightweight footprint, only 43 kB minified and compressed, no third party dependencies.

  • js-joda is fast. It is about 2 to 10 times faster than other JavaScript date libraries.

  • js-joda comes with built-in parsers/ formatters for ISO 8601 as specified in RFC 3339, that can be easily customized.

  • js-joda supports ECMAScript 5 browsers down to IE11.

  • js-joda is a port of the threeten backport, which is the base for JSR-310 implementation of the Java SE 8 java.time package. Threeten is inspired by Joda-Time, having similar concepts and the same author.

  • js-joda is robust and stable. We ported more then 1700 test-cases with a lots of test-permutations from the threetenbp project. We run the automated karma test-suite against Firefox, Chrome, Node and phantomjs.

Why yet another JavaScript date and time library?

  • Popular JavaScript date libraries like moment or date-utils are wrappers around the native JavaScript Date object, providing syntactic sugar. The native Date object always consist of a date, time and a timezone part. In contrast, js-joda is a standalone date and time implementation.

  • The API has a domain-driven design with classes for each of the different use cases, like LocalDate, ZonedDateTime or Period. For example, LocalDate allows you to handle dates without times (like birthdays or holidays) in a clean and error-safe way, especially if these dates are persisted to an external server.

  • js-joda is immutable. Immutability aligns well with pure functions and with the architecture of frameworks like React and Flux.

The ThreeTen domain models

Dates and Times

  • LocalDate represents a date without a time and timezone in the ISO-8601 calendar system, such as 2007-12-24.

  • LocalTime represents a time without timezone in the ISO-8601 calendar system such as '11:55:00'.

  • LocalDateTime is a description of the date (LocalDate), as used for birthdays, combined with the local time (LocalTime) as seen on a wall clock.

  • ZonedDateTime is a date-time with a timezone in the ISO-8601 calendar system, such as 2007-12-24T16:15:30+01:00 UTC+01:00.

  • Instant is an instantaneous point on the time-line measured from the epoch of 1970-01-01T00:00:00Z in epoch-seconds and nanosecond-of-second.

Duration and Period

  • Duration is a time-based amount of time, such as '34.5 seconds'.

  • Period is a date-based amount of time in the ISO-8601 calendar system, such as '2 years, 3 months and 4 days'.

Additional value types

  • Year represents a year in the ISO-8601 calendar system, such as '2016'.

  • YearMonth represents a year and a month in the ISO-8601 calendar system, such as '2016-01'.

  • Month represents a month-of-year in the ISO-8601 calendar system, such as 'July'.

  • MonthDay represents a month-day in the ISO-8601 calendar system, such as '--12-03'. Could be used to represent e.g. Birthdays.

  • DayOfWeek represents a day-of-week in the ISO-8601 calendar system, such as 'Tuesday'.

Getting started

Node

Install joda using npm

npm install @js-joda/core

Then require it to any module

var LocalDate = require('@js-joda/core').LocalDate;

var d = LocalDate.parse('2012-12-24').atStartOfDay().plusMonths(2); // 2013-02-24T00:00:00

Browser

To use js-joda from a browser, download either dist/js-joda.min.js or dist/js-joda.js (with sourcemaps for development). Then add it as a script tag to your page

<script src="js-joda.min.js"></script>
<script>
    var LocalDate = JSJoda.LocalDate;
    var d = LocalDate.parse('2012-12-24').atStartOfDay().plusMonths(2); // 2013-02-24T00:00:00
</script>

js-joda packages

js-joda consist of four packages:

| package name | description | path | |---|---|---| | @js-joda/core | Implementation of the ThreeTen Classes and API | /packages/core | | @js-joda/timezone | Implementation of timezone calculation based on the iana Time Zone Database | /packages/timezone | | @js-joda/locale | Implementation of locale specific functionality for js-joda, especially for formatting and parsing locale specific dates | /packages/locale | | @js-joda/extra | Implementation of the ThreeTen-Extra Classes and API |/packages/extra |

The @js-joda/examples package is for testing the different build artifacts in different context, like webpack, browser node, etc.

Documentation

Contributing

Contributions are always welcome. Before contributing please read the code of conduct & search the issue tracker. We use GitHub issues. Your issue may have already been discussed or fixed. To contribute, fork js-joda, commit your changes, & send a pull request.

By contributing to js-joda, you agree that your contributions will be licensed under its BSD license.

Note that only pull requests and issues that match the threeten backport API will be considered. Additional requested features will be rejected.

License

  • js-joda is released under the BSD 3-clause license.

  • js-joda uses the ThreeTen-Backport implementation (http://www.threeten.org/threetenbp/) as a reference base for implementation. This allows us to release js-joda under the BSD License while the OpenJDK java.time implementation is under GNU GPL+linking exception. The API of the ThreeTen-Backport is mostly identical to the official Java SE 8 API from the view of our JavaScript port.

  • Our implementation reference base ThreeTen-Backport (http://www.threeten.org/threetenbp/) is also released under the BSD 3-clause license

  • OpenJDK is under GNU GPL+linking exception.

  • The author of Joda-Time and the lead architect of the JSR-310 is Stephen Colebourne.

The API of this project (as far as possible with JavaScript), a lot of implementation details and documentation are just copied but never equalled.

Roadmap

Milestone 1: Core domains (reached with version v1.0.0)

  • Support for the domain models LocalDate, LocalDateTime, ZonedDateTime, Instant, Duration and Period converting to and from ISO8601.
  • ZonedDateTime (without support for loading iana timezone databases) currently supports only fixed offsets like UTC or UTC+02:00 and the system default time zone.

Milestone 2: IANA timezone support (reached with version v1.2.0)

  • Add IANA timezone database support to js-joda. Implement handling of daylight saving transitions, mainly in ZonedDateTime.
  • For access to the IANA timezone database, the plugin @js-joda/timezone is required. It provides an implementation of the ZoneRulesProvider and contains the iana timezone database.

Milestone 3: Locale support (reached with v2.0.0 of @js-joda/locale)

  • Add locale support.
  • Extend pattern parser/ formatter for text with locale support.

see the plugin @js-joda/locale

Future Milestones

  • Reduce library size by removing redundant code, especially by refactoring code for formatting/ parsing dates.
  • Increase test coverage (ongoing task)
  • Cleanup documentation (ongoing task)