Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/bashleigh/shleemy

:clock10: Human readable datetime values for JavaScript and TypeScript.
https://github.com/bashleigh/shleemy

date datetime human-readable intervals

Last synced: about 2 months ago
JSON representation

:clock10: Human readable datetime values for JavaScript and TypeScript.

Awesome Lists containing this project

README

        

## shleemy


test badge

Coverage Status

Simple human readable intervals for those that don't want to go to time prison.


Handy interval diff object for customisable, rounded, human readable phrases such as "in 3 days", "12 years ago", "a minute ago", "just now".



shleemypants

- Small
- Mighty
- No dependencies
- Easy to use
- You won't go to time prison for messing with time

> Inspiration take from [Carbon](https://github.com/briannesbitt/carbon)

### Install

```bash
$ yarn add shleemy
```

Or

```npm
$ npm i shleemy
```

### Usage

##### Basic

Get human readable values with tense information

**Present**
```ts
import { shleemy } from "shleemy";

const interval = shleemy(new Date());

console.log(interval.forHumans); // "just now"
console.log(interval.tense); // "present"
```
**Past**
```ts
import { shleemy } from "shleemy";

const date = new Date();
date.setMinutes(date.getMinutes() - 3);

console.log(shleemy(date).forHumans); // "3 minutes ago"
console.log(shleemy(date).tense); // "past"
```
**Future**
```ts
import { shleemy } from "shleemy";

const date = new Date();
date.setMinutes(date.getMinutes() + 70);

console.log(shleemy(date).forHumans); // "in an hour"
console.log(shleemy(date).tense); // "future"
```

##### interval values

```ts
import { shleemy } from "shleemy";

const date = new Date();
date.setHours(date.getHours() - 3);

console.log(shleemy(date).roundedHours); // 3
```

```ts
import { shleemy } from "shleemy";

const date = new Date();
date.setDays(date.getDays() - 12);

console.log(shleemy(date).roundedDays); // 12
console.log(shleemy(date).roundedWeeks); // 1
```

##### Basic Formatting

```ts
const date = new Date();
date.setDays(date.getDays() - 12);

const interval = shleemy(date);

console.log(interval.time); // 12:34
console.log(interval.date); // 12/03/2021
```
> No locale as of now, so you backwards date people will have to do with day/month/year. Soz

### Output manipulation

The Shleemy object can be used as a string!

```ts
import { shleemy } from "shleemy";

const date = new Date();
date.setDays(date.getDays() - 12);

const interval = shleemy(date);

console.log(`added ${interval}`); // added 12 days ago;
console.log(`${interval.replace('days', 'yonders')}`); // 12 yonders ago;
```

**Available properties**

```ts
import { shleemy } from "shleemy";

const date = new Date();
date.setDays(date.getDays() - 12);
const interval = shleemy(date);

console.log('seconds', interval.seconds);
console.log('rounded seconds', interval.roundedSeconds);
console.log('minutes', interval.minutes);
console.log('rounded minutes', interval.roundedMinutes);
console.log('hours', interval.hours);
console.log('rounded hours', interval.roundedHours);
console.log('days', interval.days);
console.log('rounded days', interval.roundedDays);
console.log('weeks', interval.weeks);
console.log('rounded weeks', interval.roundedWeeks);
console.log('months', interval.months);
console.log('rounded months', interval.roundedMonths);
console.log('years', interval.years);
console.log('rounded years', interval.roundedYears);
console.log('tense', interval.tense);
```
> All properties will be positive values. You cannot have -3 days in the 4th dimension. Use `tense` for past/present/future value

### Options

```ts
import { shleemy, ShleemyInterval } from "shleemy";

const date = new Date();
date.setDays(date.getDays() - 12);

const toDate = new Date();
toDate.setDays(toDate.getDays() - 20);

console.log(
shleemy(date, {
toDate: toDate, // default: new Date() (now)
rounding: 'ceil', // default: floor
humanReadable: {
past: (value, interval) => `${value} ${ShleemyInterval.pluralInterval(value, interval)} yonders ago`, // default: ShleemyInterval.toHumanReadablePast
future: (value, interval) => `in ${value} ${ShleemyInterval.pluralInterval(value, interval)} and you get the idea`, // default: ShleemyInterval.toHumanReadableFuture
present: () => `seconds ago!`, // default: "just now"
}
}).days
); // 8
```