date-japanese
Version:
Convert Japanese calendar dates to Western calendar dates and vice versa. Full support for Kanji numerals in Wareki dates.
183 lines (123 loc) • 6.29 kB
Markdown
Convert Japanese calendar dates to Western calendar dates and vice versa. Full support for Kanji numerals in Wareki dates.
```bash
npm install --save date-japanese
```
```js
const {toWesternCalendar, toJapaneseCalendar} = require('date-japanese');
toWesternCalendar('令和4年2月21日', 'YYYY-MM-DD'); // -> 2022-02-21
toWesternCalendar('令和七年一月三十一日', 'YYYY-MM-DD'); // -> 2025-01-31
toWesternCalendar('令和4年2月', 'YYYY-MM'); // -> 2022-02
toWesternCalendar('昭和64年', 'YYYY'); // -> 1989
toJapaneseCalendar('2022-02-21'); // -> 令和4年2月21日
toJapaneseCalendar('1989-01'); // -> 昭和64年1月
toJapaneseCalendar('1990'); // -> 平成2年
```
Or in ES6 syntax:
```js
import {toWesternCalendar, toJapaneseCalendar} from 'date-japanese';
toWesternCalendar('令和4年2月21日', 'YYYY-MM-DD'); // -> 2022-02-21
toWesternCalendar('令和七年一月三十一日', 'YYYY-MM-DD'); // -> 2025-01-31
toWesternCalendar('令和4年2月', 'YYYY-MM'); // -> 2022-02
toWesternCalendar('昭和64年', 'YYYY'); // -> 1989
toJapaneseCalendar('2022-02-21'); // -> 令和4年2月21日
toJapaneseCalendar('1989-01'); // -> 昭和64年1月
toJapaneseCalendar('1990'); // -> 平成2年
```
```html
<script src="node_modules/date-japanese/dist/build.js"></script>
<script>
dateJapanese.toWesternCalendar('令和4年2月21日', 'YYYY-MM-DD'); // -> 2022-02-21
dateJapanese.toJapaneseCalendar('2022-02-21'); // -> 令和4年2月21日
</script>
```
Or in ES6 syntax:
```html
<script type="module">
import {toWesternCalendar, toJapaneseCalendar} from 'node_modules/date-japanese/dist/build.mjs';
toWesternCalendar('令和4年2月21日', 'YYYY-MM-DD'); // -> 2022-02-21
toJapaneseCalendar('2022-02-21'); // -> 令和4年2月21日
</script>
```
Converts a Japanese calendar date to a Western calendar date in the specified format.
Supported eras: Meiji (明治), Taisho (大正), Showa (昭和), Heisei (平成), Reiwa (令和).
This function can also handle Japanese dates written with Kanji numerals.
**Parameters:**
* `japaneseDate`: Japanese calendar date (e.g., '令和4年2月20日', '令和4年2月', '令和4年').
* `format`: Output date format. Available tokens: YYYY, YY, M, MM, MMM, MMMM, D, DD (default: 'YYYY-MM-DD').
* `throwOnInvalid`: If `true`, throws an error if the input date is invalid. If `false`, returns an empty string (default: `false`).
**Return value:**
The Western calendar date in the specified format, or an empty string if the input is invalid and `throwOnInvalid` is `false`.
**Examples:**
```js
toWesternCalendar('令和元年5月1日'); // -> 2019-05-01
toWesternCalendar('令和4年2月21日', 'YYYY/MM/DD'); // -> 2022/02/21
toWesternCalendar('平成元年1月', 'YYYY-MM'); // -> 1989-01
```
Converts a Western calendar date to a Japanese calendar date.
This function only supports dates from 1868-01-25 onwards (Meiji era and later).
**Parameters:**
* `westernDate`: Western calendar date in one of the following formats: 'YYYY-MM-DD', 'YYYY-M-D', 'YYYY/MM/DD', 'YYYY/M/D', 'MM-DD-YYYY', 'M-D-YYYY', 'MM/DD/YYYY', 'M/D/YYYY', 'YYYY-MM', 'YYYY-M', 'YYYY/MM', 'YYYY/M', 'MM-YYYY', 'M-YYYY', 'MM/YYYY', 'M/YYYY', 'YYYY'.
* `throwOnInvalid`: If `true`, throws an error if the input date is invalid. If `false`, returns an empty string (default: `false`).
**Return value:**
The Japanese calendar date, or an empty string if the input date is before the Meiji era or invalid (and `throwOnInvalid` is `false`).
**Examples:**
```js
toJapaneseCalendar('2019-05-01'); // -> 令和元年5月1日
toJapaneseCalendar('2022-02-21'); // -> 令和4年2月21日
toJapaneseCalendar('1989-02'); // -> 平成元年2月
```
Checks if the given value is a valid Japanese calendar date.
**Parameters:**
* `value`: The value to be validated.
**Return value:**
`true` if the value is a valid Japanese calendar date, `false` otherwise.
**Examples:**
```js
isValidJapaneseCalendar('令和元年5月1日'); // -> true
isValidJapaneseCalendar('令和4年2月21日'); // -> true
isValidJapaneseCalendar('2022-02-21'); // -> false
```
This package includes demos for various environments:
* **Browser Demo:** [demo/browser/index.html](demo/browser/index.html)
* See the screenshot below for a preview.
* **Node.js (CommonJS):** [cjs/index.cjs](cjs/index.js)
* **Node.js (ES Modules):** [esm/index.js](esm/index.js)

```bash
node prototypes/run_japanese_calendar.mjs -d 2025-01-30
node prototypes/run_japanese_calendar.mjs -d 2025/1/30
node prototypes/run_japanese_calendar.mjs -d 2025-01
node prototypes/run_japanese_calendar.mjs -d 2025/1
node prototypes/run_japanese_calendar.mjs -d 2025
```
```bash
node prototypes/run_wester_calendar.mjs -d 令和七年一月二日
node prototypes/run_wester_calendar.mjs -d 大正元年7月30日
```
```bash
npm test
```
All changes can be found [here](CHANGELOG.md).
**Takuya Motoshima**
* [github/takuya-motoshima](https://github.com/takuya-motoshima)
* [twitter/TakuyaMotoshima](https://twitter.com/TakuyaMotoshima)
* [facebook/takuya.motoshima.7](https://www.facebook.com/takuya.motoshima.7)
[](LICENSE)