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

@nghiavuive/lunar_date_vi

v2.0.1

Published

A tool for converting lunar date and solar date and vice versa

Downloads

16

Readme

npm npm bundle size npm downloads

Table of Contents

Features

  • Chuyển đổi lịch dương sang lịch âm (của Việt Nam) và ngược lại.
  • Tính các thông tin của lịch âm như: giờ Hoàng Đạo, tên của giờ, tháng, năm theo can chi

Installation

Package manager

Cài đặt qua NPM

npm install @nghiavuive/lunar_date_vi

Xem demo cài đặt với các module types: LunarDate_Import

import { LunarDate, SolarDate } from "@nghiavuive/lunar_date_vi";

Nếu sử dụng Typescript, lưu ý cấu hình tsconfig.json như sau:

{
  "compilerOptions": {
    "esModuleInterop": true,
    "moduleResolution": "node",
    "module": "ESNext" // Hoặc "CommonJS" nếu dùng CJS
  },
  "include": ["./**/*.ts"],
  "exclude": ["node_modules"]
}

Nếu sử dụng require

const calendar = require("@nghiavuive/lunar_date_vi");

CDN

Sử dụng qua jsDelivr

<script src="https://cdn.jsdelivr.net/gh/NghiaCaNgao/LunarDate@tree/latest/dist/index.umd.js"></script>

Examples

Ví dụ sau sử dụng ES Module với Typescript. JavaScript tương tự.

Note Nếu sử dụng ts-node thì cần chạy npx ts-node --esm <filename>. Hiện tại chưa tương thích với Node 20.x

Đoạn lệnh sau chuyển từ lịch dương sang lịch âm (trên) và âm sang dương (dưới).

Note Khi khởi tạo instance LunarDate thì luôn phải gọi hàm init()

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

const solar_date = new SolarDate(new Date());
console.log(solar_date);
console.log(solar_date.toLunarDate());

const lunar_date = new LunarDate({ day: 10, month: 5, year: 2023 });
lunar_date.init(); // initialize lunar_date before using
console.log(lunar_date.toSolarDate());

// SolarDate {
//   day: 19,
//   month: 6,
//   year: 2023,
//   name: 'solar_calendar',
//   jd: 2460115,
//   leap_year: false
// }

// LunarDate {
//   day: 2,
//   month: 5,
//   year: 2023,
//   name: 'lunar_calendar',
//   jd: 2460115,
//   leap_year: true,
//   leap_month: false
// }

// SolarDate {
//   day: 27,
//   month: 6,
//   year: 2023,
//   name: 'solar_calendar',
//   jd: 2460123,
//   leap_year: false
// }

Nếu sử dụng CommonJs

const _calendar = require("@nghiavuive/lunar_date_vi/dist/index.cjs");

var solar_date = new _calendar.SolarDate(new Date());
var lunar_date = solar_date.toLunarDate();

console.log(lunar_date.getMonthName()); // Mậu Ngọ

Nếu sử dụng UMD

<script src="https://cdn.jsdelivr.net/gh/NghiaCaNgao/lunarDate@1a7fb3b/dist/index.umd.js"></script>
<script>
  var lunar_date = new window._calendar.LunarDate({
    day: 1,
    month: 1,
    year: 2020,
  });
  lunar_date.init();
  console.log(lunar_date);
</script>

<!-- SolarDate {
  day: 1,
  month: 1,
  year: 2020,
  name: 'lunar_calendar',
  jd: 2458874,
  leap_year: false,
  leap_month: false,
} -->

API

Interfaces

ICalendarDate

Input của Calendar (abstract class LunarDateSolarDate)

export interface ICalendar {
  day: number;
  month: number;
  year: number;
}

ISolarDate

Input của SolarDate. Kế thừa từ ICalendarDate

interface ISolarDate extends ICalendar {}

ILunarDate

Input của LunarDate. Kế thừa từ ICalendarDate

interface ILunarDate extends ICalendarDate {
  jd?: number;
  leap_month?: boolean;
  leap_year?: boolean;
}

ILuckyHour

Cung hoàng đạo

interface ILuckyHour {
  name: string;
  time: number[];
}

SolarDate

Solar constructor 1

Tạo thực thể SolarDate từ ISolarDate.

Note Nếu nhập sai ngày tháng thì sẽ báo lỗi Invalid date. Chi tiết về ngày hợp lệ xem tại đây

public constructor(date: ISolarDate);

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

new SolarDate({ day: 1, month: 1, year: 2023 });

Solar constructor 2

Tạo thực thể SolarDate từ Date object.

Note Nếu nhập sai ngày tháng thì đối tượng Date sẽ tự sửa lại. Nếu ngày nhập vào nằm trong khoảng từ 05-14/10/1582 thì sẽ báo lỗi Invalid date. Chi tiết về ngày hợp lệ xem tại đây

public constructor(date: Date);

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

new SolarDate(new Date());

SolarDate.FIRST_DAY

Ngày Julian tương ứng ngày đầu tiên trong giới hạn tính toán 1200-1-31

public static readonly FIRST_DAY: number = SolarDate.jdn(new Date(1200, 0, 31)); //1200-1-31

SolarDate.LAST_DAY

Ngày Julian tương ứng ngày cuối cùng trong giới hạn tính toán 2199-12-31

public static readonly LAST_DAY: number = SolarDate.jdn(new Date(2199, 11, 31)); //2199-12-31

SolarDate.fromJd()

Trả về một thực thể SolarDate từ ngày Julian.

static fromJd(jd: number): SolarDate

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

console.log(SolarDate.fromJd(2460035));

// SolarDate { day: 31, month: 3, year: 2023, jd: 2460035, leap: false }

SolarDate.jdn()

Trả về ngày Julian date tương ứng với ICalendarDate hoặc Date Ref: https://ssd.jpl.nasa.gov/tools/jdc/#/jd

static jdn(date: ICalendarDate | Date): number

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

console.log(SolarDate.jdn(new Date())); // 2460115
console.log(SolarDate.jdn({ day: 19, month: 6, year: 2023 })); // 2460115

solar.toDate()

Chuyển thực thể SolarDate về dạng Date

toDate(): Date

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

const solar = new SolarDate(new Date());
console.log(solar.toDate());

// 2023-06-18T17:00:00.000Z

solar.toLunarDate()

Chuyển từ thực thể SolarDate sang thực thể LunarDate

toLunarDate(): LunarDate

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

var solar = new SolarDate(new Date());
var lunar = solar.toLunarDate();

console.log(lunar);

// LunarDate {
//   day: 2,
//   month: 5,
//   year: 2023,
//   name: 'lunar_calendar',
//   jd: 2460115,
//   leap_year: true,
//   leap_month: false
// }

solar.setDate()

Thay đổi thời gian của thực thể SolarDate

setDate(date: ICalendarDate | Date): void

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

var solar = new SolarDate(new Date()); // 2023-06-19

solar.setDate(new Date(2023, 1, 1));
console.log(solar);

// SolarDate {
//     day: 1,
//     month: 2,
//     year: 2023,
//     name: 'solar_calendar',
//     jd: 2459977,
//     leap_year: false
// }

solar.setDate({ day: 5, month: 5, year: 2015 });
console.log(solar);

// SolarDate {
//     day: 5,
//     month: 5,
//     year: 2015,
//     name: 'solar_calendar',
//     jd: 2457148,
//     leap_year: false
// }

solar.get()

Lấy thông tin của thực thể SolarDate

get();

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

const dl = new SolarDate(new Date());
console.log(dl.get());

// {
//   name: 'solar_calendar',
//   day: 19,
//   month: 6,
//   year: 2023,
//   leap_year: false,
//   julian: 2460115
// }

LunarDate

Lunar constructor

Tạo thực thể LunarDate từ ILunarDate

Note Để nhập tháng nhuận, sử dụng thêm attr leap_month = true. Nếu sử dụng leap_month = true với tháng không thể nhuận, tư động chuyển về leap_month = false.

Note Nếu nhập sai ngày tháng sẽ trả về lỗi Invalid date

Note Khi khởi tạo cần điền đầy đủ day, month, year. Nếu không điền các thông tin khác (leap_year, ...) thì mặc định là undefined. Sau khi khởi tạo có thể sử dụng hàm lunar.init() để tự động điền các thông tin còn thiếu. Nếu các thông tin (leap_year, jd,...) là undefined thì sẽ không thể sử dụng được các hàm khác trong thực thể.

constructor(date: ILunarDate)

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

const al = new LunarDate({ day: 1, month: 1, year: 2023 });
console.log(al);

// LunarDate {
//   day: 1,
//   month: 1,
//   year: 2023,
//   name: 'lunar_calendar',
//   jd: undefined,
//   leap_year: undefined,
//   leap_month: undefined
// }

const al = new LunarDate({ day: 1, month: 2, year: 2023, leap_month: true });
al.init();
console.log(al.toSolarDate());

// SolarDate {
//   day: 22,
//   month: 3,
//   year: 2023,
//   name: 'solar_calendar',
//   jd: 2460026,
//   leap_year: false
// }

SolarDate.fromSolarDate()

Chuyển từ SolarDate sang LunarDate.

static fromSolarDate(date: SolarDate): LunarDate

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

const dl = new SolarDate(new Date());
console.log(LunarDate.fromSolarDate(dl));

// LunarDate {
//   day: 2,
//   month: 5,
//   year: 2023,
//   name: 'lunar_calendar',
//   jd: 2460115,
//   leap_year: true,
//   leap_month: false
// }

lunar.init()

Khởi tạo giá trị cho thực thể. Nếu force_change = false, chỉ áp dụng thay đổi giá trị phụ (leap-year, jd, ...) của thực thể khi chúng khác undefined. Nếu force_change = true, luôn thay đổi giá trị phụ.

init(force_change: boolean = false)

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

let lunar = new LunarDate({ day: 2, month: 5, year: 2023 });
lunar.init();
console.log(lunar);

// LunarDate {
//   day: 2,
//   month: 5,
//   year: 2023,
//   name: 'lunar_calendar',
//   jd: 2460115,
//   leap_year: true,
//   leap_month: false
// }

lunar.get()

Lấy thông tin của thực thể LunarDate.

get();

Ví dụ:

const dl = new SolarDate(new Date());
const al = LunarDate.fromSolarDate(dl);
console.log(al.get());

// {
//   name: 'lunar_calendar',
//   day: 2,
//   month: 5,
//   year: 2023,
//   leap_year: true,
//   julian: 2460115,
//   year_name: 'Quý Mão',
//   leap_month: false
// }

lunar.getYearName()

Lấy tên của năm theo can chi.

getYearName(): string

lunar.getMonthName()

Lấy tên của tháng theo can chi.

getMonthName(): string

lunar.getDayName()

Lấy tên của ngày theo can chi.

getDayName(): string

lunar.getHourName()

Lấy tên của giờ theo can chi.

getHourName(): string

lunar.getDayOfWeek()

Lấy tên thứ trong tuần.

getDayOfWeek(): string

lunar.getSolarTerm()

Lấy tên tiết khí

getTietKhi(): string

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

let lunar = new LunarDate({ day: 2, month: 5, year: 2023 });
lunar.init();

console.log(lunar.getYearName()); // Quý Mão
console.log(lunar.getMonthName()); // Mậu Ngọ
console.log(lunar.getDayName()); // Mậu Thân
console.log(lunar.getHourName()); // Nhâm Tý
console.log(lunar.getSolarTerm()); // Mang chủng
console.log(lunar.getDayOfWeek()); // Thứ hai

lunar.getLuckyHours()

Lấy giờ hoàng đạo.

getLuckyHours(): Array<ILuckyHour>

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

const dl = new SolarDate(new Date());
const al = LunarDate.fromSolarDate(dl);
console.log(al.getZodiacHour());

// [
//   { name: 'Tý', time: [ 23, 1 ] },
//   { name: 'Sửu', time: [ 1, 3 ] },
//   { name: 'Thìn', time: [ 7, 9 ] },
//   { name: 'Tỵ', time: [ 9, 11 ] },
//   { name: 'Mùi', time: [ 13, 15 ] },
//   { name: 'Tuất', time: [ 19, 21 ] }
// ]

lunar.toSolarDate()

Chuyển từ LunarDate sang SolarDate.

toSolarDate(): SolarDate

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

const al = new LunarDate({ day: 2, month: 5, year: 2023 });
al.init();

console.log(al.toSolarDate());

// SolarDate {
//   day: 19,
//   month: 6,
//   year: 2023,
//   name: 'solar_calendar',
//   jd: 2460115,
//   leap_year: false
// }

lunar.setDate()

Thay đổi thời gian của thực thể LunarDate

Note Hàm này chưa chuẩn hóa dữ liệu vào

setDate(date: ILunarDate): void

Ví dụ:

import { SolarDate, LunarDate } from "@nghiavuive/lunar_date_vi";

const al = new LunarDate({ day: 2, month: 5, year: 2023 });
al.init();
al.setDate({ day: 2, month: 10, year: 2023 });

console.log(al.toSolarDate());

// SolarDate {
//   day: 14,
//   month: 11,
//   year: 2023,
//   name: 'solar_calendar',
//   jd: 2460263,
//   leap_year: false
// }