Ecosyste.ms: Awesome

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

Awesome Lists | Featured Topics | Projects

https://github.com/coder966/intl-date

Javascript library to represent and work with dates in different calendar systems (e.g. hijri, persian and others).
https://github.com/coder966/intl-date

calendar date hijrah hijri hijri-calendar hijri-date hijri-dates hijri-dates-converter internationalization intl intl-apis javascript persian persian-calendar

Last synced: about 4 hours ago
JSON representation

Javascript library to represent and work with dates in different calendar systems (e.g. hijri, persian and others).

Awesome Lists containing this project

README

        

# Intl Date

Javascript library to represent and work with dates in different calendar systems (e.g. hijri, persian and others).

## Features

- Simple and type-safe API
- Immutable objects
- Supports 7 calendar systems
- Tiny: 1kB (minified + gzipped)
- Zero dependencies. Leverages `Intl.DateTimeFormat`.

## Supported Calendars

- gregorian
- islamic
- islamic-umalqura
- islamic-rgsa
- islamic-civil
- islamic-tbla
- persian

## Installation

```shell
$ npm install intl-date
```

## Example

```javascript
const date = IntlDate.of('islamic-umalqura', 1377, 3, 22);

date.toString('gregorian'); // 1957-10-16
date.getYear('gregorian'); // 1957
date.getMonth('gregorian'); // 10
date.getDay('gregorian'); // 16

date.toString('islamic-umalqura'); // 1377-03-22
date.getYear('islamic-umalqura'); // 1377
date.getMonth('islamic-umalqura'); // 3
date.getDay('islamic-umalqura'); // 22

date.toString('persian'); // 1336-07-24
date.getYear('persian'); // 1336
date.getMonth('persian'); // 7
date.getDay('persian'); // 24
```

## API

### Different ways to create IntlDate objects

#### of - Create IntlDate from a year, month, and day

```javascript
const date = IntlDate.of('islamic-umalqura', 1377, 3, 22);
```

#### from - Create IntlDate from a Javascript Date object

```javascript
const jsDate = new Date(2017, 11, 25);
const intlDate = IntlDate.from(jsDate);
```

#### parse - Create IntlDate from a string

```javascript
const date = IntlDate.parse('gregorian', '1957-05-16');
```

#### today - Create IntlDate for today's date

```javascript
const date = IntlDate.today();
```

### Getters

#### getYear

```javascript
const year = date.getYear('islamic-umalqura');
```

#### getMonth

```javascript
const month = date.getMonth('gregorian');
```

#### getDay

```javascript
const day = date.getDay('persian');
```

#### getDayOfWeek

```javascript
const dayOfWeek = date.getDayOfWeek();
```

#### getQuarter

```javascript
const quarter = date.getQuarter('gregorian');
```

### Manipulative operations (produces new immutable IntlDate objects)

#### plusDays

```javascript
const oldDate = IntlDate.of('gregorian', 1957, 10, 16);
const newDate = oldDate.plusDays(20);

oldDate.toString('gregorian'); // 1957-10-16
newDate.toString('gregorian'); // 1957-11-05
```

#### minusDays

```javascript
const oldDate = IntlDate.of('gregorian', 1957, 10, 16);
const newDate = oldDate.minusDays(20);

oldDate.toString('gregorian'); // 1957-10-16
newDate.toString('gregorian'); // 1957-09-26
```

### Comparing IntlDate objects

#### isEqual

```javascript
const date1 = IntlDate.of('gregorian', 1957, 10, 16);
const date2 = IntlDate.of('islamic-umalqura', 1377, 3, 22);
const result = date1.isEqual(date2); // true
```

#### isBefore

```javascript
const date1 = IntlDate.of('gregorian', 1957, 10, 15);
const date2 = IntlDate.of('islamic-umalqura', 1377, 3, 22);
const result = date1.isBefore(date2); // true
```

#### isAfter

```javascript
const date1 = IntlDate.of('gregorian', 1957, 10, 17);
const date2 = IntlDate.of('islamic-umalqura', 1377, 3, 22);
const result = date1.isAfter(date2); // true
```

#### isBetween

```javascript
const date1 = IntlDate.of('gregorian', 1957, 10, 16);
const date2 = IntlDate.of('gregorian', 1957, 10, 20);
const date3 = IntlDate.of('gregorian', 1957, 10, 25);
const result = date2.isBetween(date1, date3); // true
```

#### daysUntil

```javascript
const date1 = IntlDate.of('gregorian', 1957, 10, 16);
const date2 = IntlDate.of('gregorian', 1957, 11, 20);
const days = date1.daysUntil(date2); // 35
```

#### min

```javascript
const date1 = IntlDate.of('gregorian', 1957, 10, 16);
const date2 = IntlDate.of('gregorian', 1957, 10, 20);
const min = IntlDate.min(date1, date2); // date1
```

#### max

```javascript
const date1 = IntlDate.of('gregorian', 1957, 10, 16);
const date2 = IntlDate.of('gregorian', 1957, 10, 20);
const max = IntlDate.max(date1, date2); // date2
```

### String operations

#### format

```javascript
const date = IntlDate.of('gregorian', 2022, 7, 11);
const formattedString = date.format('gregorian', 'yyyy-MM-dd'); // 2022-07-11
```

#### toString

```javascript
const date = IntlDate.of('gregorian', 2022, 7, 11);
const string = date.toString('gregorian'); // 2022-07-11
```

## License

```txt
Copyright 2022 Khalid H. Alharisi

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```