date-chinese
v2.1.4
Published
Chinese Calendar
Downloads
714,327
Maintainers
Readme
date-chinese
Chinese Calendar
Chinese Calendar calculations with conversion from/ to Gregorian Date.
The module supports:
- conversion from Gregorian Date to Chinese Date and vice versa
- conversion from javascript Date object to Chinese Date and vice versa
- conversion from JDE to Chinese Date and vice versa
- calculation of chinese New Year for a given Gregorian year
- calculation of Qı̄ngmíng pure brightness festival
- calculation of solar terms (minor - Jiéqì / major - Zhōngqì)
- calculations of Korean, Vietnamese Calendar based on the Chinese but using a different meridian
- calculations of Japanese solar terms (sekki)
Note: Some calculations may take quite some time (> 40ms). Therefore
CalendarChinese
has a built in cache to store results of long running
calculations.
Table of Contents
- Usage
- Japanese Calendar
- Korean Calendar
- Vietnamese Calendar
- Contribution and License Agreement
- License
- References
Usage
Construct a new Chinese Date
Parameters
cycle: Number | Array | Object
, chinese 60 year cicle; if {Array}
than [cycle, year, ..., day]
year: Number
, chinese year in cycle
month: Number
, chinese month
leap: Number
, true
if leap month
day: Number
, chinese day
const CalendarChinese = require('date-chinese')
let cal = new CalendarChinese(78, 1, 10, true, 9)
cal.get()
//> [ 78, 1, 10, true, 9 ]
CalenderChinese
uses an internal cache for long running calculations.
Use set()
to reuse cached results.
from Gregorian Date
The timezone of the Gregorian Date is Chinese Standard Time (Beijing Time for years less than 1929).
const CalendarChinese = require('date-chinese')
let cal = new CalendarChinese()
cal.fromGregorian(1984, 12, 1)
// properties
cal.cycle //> 78
cal.year //> 1
cal.month //> 10
cal.leap //> true // is leap month
cal.day //> 9
let [cycle, year, month, leap, day] = cal.get()
//> [ 78, 1, 10, true, 9 ]
to Gregorian Date
Convert Chinese Date back to Gregorian Date
let cal = new CalendarChinese(78, 1, 10, true, 9)
let gdate = cal.toGregorian()
//> { year: 1984, month: 12, day: 1 }
from Date
Calculate chinese calendar date from javascript Date object
let cal = new CalendarChinese()
let date = new Date('1984-12-01T00:00:00+08:00')
cal.fromDate(date)
let cdate = cal.get()
//> [ 78, 1, 10, true, 9 ]
to Date
let cal = new CalendarChinese(78, 1, 10, true, 9)
let date = cal.toDate(date).toISOString()
//> 1984-11-30T16:00:00.426Z
Chinese New Year
const CalendarChinese = require('date-chinese')
let cal = new CalendarChinese()
let newYear = cal.newYear(1985)
cal.fromJDE(newYear)
let cdate = cal.get()
//> [ 78, 2, 1, false, 1 ]
// convert to Gregorian Date (Chinese Standard Time)
let gdate = cal.toGregorian()
//> { year: 1985, month: 2, day: 20 }
// convert to Date
let date = cal.toDate()
//> 1985-02-19T16:00:00.306Z
// convert to Date for more accurate and faster result
const julian = require('astronomia').julian
let date = new julian.CalendarGregorian().fromJDE(newYear).toDate()
//> 1985-02-19T16:00:00.000Z
Qı̄ngmíng
Pure brightness festival date
let cal = new CalendarChinese()
let qm = cal.qingming(1985)
cal.fromJDE(qm)
let cdate = cal.get()
//> [ 78, 2, 2, false, 16 ]
let gdate = cal.toGregorian()
//> { year: 1985, month: 4, day: 5 }
or using chinese cycle/ year
let cal = new CalendarChinese(78, 2)
let qm = cal.qingming()
cal.fromJDE(qm)
let cdate = cal.get()
//> [ 78, 2, 2, false, 16 ]
let gdate = cal.toGregorian()
//> { year: 1985, month: 4, day: 5 }
Solar Terms
let cal = new CalendarChinese()
let qm = cal.solarTerm(5, 1985)
cal.fromJDE(qm)
let cdate = cal.get()
//> [ 78, 2, 2, false, 16 ]
let gdate = cal.toGregorian()
//> { year: 1985, month: 4, day: 5 }
Zhōngqì - Major Solar Terms
let cal = new CalendarChinese()
let qm = cal.majorSolarTerm(3, 1985)
cal.fromJDE(qm)
let cdate = cal.get()
//> [ 78, 2, 3, false, 1 ]
let gdate = cal.toGregorian()
//> { year: 1985, month: 4, day: 20 }
Jiéqì - Minor Solar Terms
let cal = new CalendarChinese()
let qm = cal.minorSolarTerm(3, 1985)
cal.fromJDE(qm)
let cdate = cal.get()
//> [ 78, 2, 2, false, 16 ]
let gdate = cal.toGregorian()
//> { year: 1985, month: 4, day: 5 }
Japanese Calendar
Epoch start for the Japanese Calendar in unknown. So Chinese Epoch in 2636 BCE is wrongly used.
Sekki
const CalendarJapanese = require('date-chinese').CalendarJapanese
let cal = new CalendarJapanese()
let qm = cal.solarTerm(1, 2016)
cal.fromJDE(qm)
let gdate = cal.toGregorian()
//> { year: 2016, month: 2, day: 4 }
Korean Calendar
Epoch start in 2333 BCE
const CalendarKorean = require('date-chinese').CalendarKorean
let cal = new CalendarKorean(73, 13, 11, false, 25)
let gdate = cal.toGregorian()
//> { year: 2000, month: 1, day: 1 }
Vietnamese Calendar
Epoch start for the Vietnamese Calendar in unknown. So Chinese Epoch in 2636 BCE is maybe wrongly used.
const CalendarVietnamese = require('date-chinese').CalendarVietnamese
let cal = new CalendarVietnamese()
cal.fromGregorian(1985, 3, 22)
let cdate = cal.get()
//> [ 78, 2, 2, true, 2 ]
let gyear = cal.yearFromEpochCycle()
//> 1985
Contribution and License Agreement
If you contribute code to this project, you are implicitly allowing your code to be distributed under the MIT license. You are also implicitly verifying that all code is your original work or correctly attributed with the source of its origin and License.
License
Copyright (c) 2016 commenthol (MIT License)
See LICENSE for more info.