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

klokwerk

v0.1.2

Published

Modern, immutable & chainable date objects!

Downloads

397

Readme

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