Git Product home page Git Product logo

klokwerk's Introduction

Klokwerk

Klokwerk is a utility library that improves developer experience when working with JS Date objects. The library features chainable setters, dynamic getters and immutability.

Usage

The library exposes a single class DateTime, which is shaped after the native JS Date interface. DateTime reimplements the native Date constructor and its methods in a way that improves developer experience.

Quick example

let oneYearFromNow = new DateTime().setYear((current) => current.fullYear + 1);

Creating a date object

you can construct a new date object just like you are used to do with Date. It essentially works the same as the native JS Date interface.

import { DateTime } from "klokwerk";

new DateTime(); // date from current time
new DateTime("2022-02-18"); // date from string
new DateTime(2022, 1, 18); // date from parameters
new DateTime(1645201589942); // date from time
new DateTime(new Date()); // date from Date
new DateTime(new DateTime()); // date from other DateTime object

Changing a date object

You can use the same setter methods as the native Date interface. However, there are some differences.

You can use the current date state as reference to update a property:

let myDate = new DateTime();

// increment by one month
myDate.setMonth((current) => current.month + 1);

DateTime's are immutabe: Its setter methods return a new DateTime instance with updated properties.

let myDate = new DateTime();
let otherDate = myDate.setYear(2022);

myDate === otherDate; // false

Since every setter/setX method returns a new DateTime instance, you can chain these methods.

let myDate = new DateTime().setYear(1993).setMonth(2).setDate(20);

Reading a date object's properties

DateTime implements dynamic getters, which mirror JS' Date getter methods. For example, a native Date has the method getFullYear(). The DateTime equivalent is simply fullYear.

let year = new DateTime().fullYear;

Accessing the native Date object

You can access the native date object by referencing .native.

new DateTime().native; // Date

valueOf and toString implementations

valueOf

DateTime implements valueOf, and behaves like native Date.prototype.valueOf

let time = +new DateTime(); // number

toString

DateTime returns an ISO string

let iso = new DateTime().toString(); // ISO format string

klokwerk's People

Contributors

stefvw93 avatar

Watchers

James Cloos avatar Stijlbreuk avatar

klokwerk's Issues

Make `current` the respective value

Would it be an idea to move the current value when using a .setX to be the value X?

new DateTime().setMonth((current: DateTime) => current.date + 1)

new DateTime().setMonth((current: number) => current + 1)

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.