Skip to content

N6LDateJapanese

NAS6mixfoolv edited this page Aug 17, 2026 · 11 revisions

N6LDate 高精度暦計算クラス

目次に戻る

N6LDate は、JavaScript の Date を拡張した 高精度・多機能の暦計算クラスです。
以下の特徴を持ちます:

  • グレゴリオ暦・ユリウス暦の 改暦(国別)に対応
  • JD(ユリウス日)・MJD の相互変換
  • UNIX 時刻(秒 / ミリ秒) の相互変換
  • 地域別の曜日・月名 に対応
  • 多態性コンストラクタ(7種類以上の入力形式)
  • normalize() による暦補正
  • 軌道計算・天文学用途に適した精度

クラス概要

const dt = new N6LDate().normalize();

N6LDate は 2段階初期化モデルです:

  1. constructor
    値をセットするだけ(暦の整合性は保証しない)
  2. normalize()
    改暦・月長補正・曜日計算・UNIX再計算などを行う

コンストラクタ仕様

対応する入力形式

入力形式 例 説明
引数なし new N6LDate() 現在時刻(Date互換)
N6LDate インスタンス new N6LDate(dt) 完全コピー
Date オブジェクト new N6LDate(new Date()) Date から変換
文字列 new N6LDate("2030-09-15T12:00:00Z") Date.parse() 互換
UNIXミリ秒 new N6LDate(Date.now()) UNIXミリ秒 → JD → 暦へ
年月日 new N6LDate(2030,9,15) 暦値を直接セット
年月日時分秒ミリ秒 new N6LDate(2030,9,15,12,34,56,789) 端数は normalize() で補正

normalize()

暦の整合性を保証するための必須処理。

  • 月長補正
  • 年長補正
  • 改暦(ReformTable)適用
  • 曜日計算
  • UNIX 時刻再計算
  • JD / MJD 再計算
const dt = new N6LDate(2030,9,15,12).normalize();

地域設定(曜日・月名)

N6LDate は地域コードに応じて曜日・月名を切り替えます。

例:

dt.regionW = "JP"; // 日本語曜日
dt.region  = "JP"; // 日本の改暦

対応地域:JP / EN / FR / DE / ES / IT / PT / RU / GR / …(多数)


改暦(ReformTable)

目次に戻る

国ごとに異なる「ユリウス暦 → グレゴリオ暦」移行日を保持。

例(日本):

1582-10-04 → 1582-10-15(10日欠落)

normalize() 時に自動適用。


JD / MJD

toJD()

const jd = dt.toJD();

fromJD()

dt.fromJD(jd).normalize();

UNIX 時刻(秒 / ミリ秒)

秒版(標準)

toUNIX()      // UNIX秒
fromUNIX(sec) // UNIX秒 → 暦

ミリ秒版(Date.getTime() 互換)

toUNIXms()      // UNIXミリ秒
fromUNIXms(ms)  // UNIXミリ秒 → 暦

フォーマット出力(toString)

目次に戻る

フォーマット定数

static get N6LDATE_FMT_DEFAULT()  { return 0; }  // ローカル形式(年月日 + 曜日 + 時刻)
static get N6LDATE_FMT_FULL()     { return 1; }  // ローカル形式(年月日 + 時刻 + 曜日)
static get N6LDATE_FMT_NW()       { return 2; }  // ローカル形式(年月日 + 時刻、曜日なし)

static get N6LDATE_FMT_DATE()     { return 3; }  // ローカル形式(年月日 + 曜日)
static get N6LDATE_FMT_DATE_NW()  { return 4; }  // ローカル形式(年月日、曜日なし)

static get N6LDATE_FMT_ISO()      { return 5; }  // ISO形式(YYYY-MM-DD(曜) T hh:mm:ss.SSS Z)
static get N6LDATE_FMT_ISO_W()    { return 6; }  // ISO形式(YYYY-MM-DD T hh:mm:ss.SSS Z + 曜日)
static get N6LDATE_FMT_ISO_NW()   { return 7; }  // ISO形式(YYYY-MM-DD T hh:mm:ss.SSS Z)

static get N6LDATE_FMT_ISO_D()    { return 8; }  // ISO形式(YYYY-MM-DD + 曜日)
static get N6LDATE_FMT_ISO_D_NW() { return 9; }  // ISO形式(YYYY-MM-DD)

使用例

dt.toString(N6LDate.N6LDATE_FMT_ISO);

カスタムフォーマット(format)

フォーマット修飾子

    var pad = (n, len = 2) => String(n).padStart(len, '0');

    const map = {
      "YYYY": year,
      "YY": String(year).slice(-2),
      "MMMM": monthName,
      "MMM": monthName.slice(0,3),
      "MM": pad(month),
      "M": month,
      "DD": pad(day),
      "D": day,
      "hh": pad(hour),
      "h": hour,
      "HH": pad(hour),
      "mm": pad(minute),
      "m": minute,
      "ss": pad(second),
      "s": second,
      "SSS": pad(ms,3),
      "A": ampm,
      "W": weekStr
    };

使用例

dt.format("YYYY-MM-DD hh:mm:ss.SSS (W)")

使用例(まとめ)

目次に戻る

const dt = new N6LDate(2030,9,15,12).normalize();
const target = new N6LDate(2060,9,15,12).normalize();

console.log(dt.toString());                        // ローカル形式
console.log(dt.toUNIX());                          // UNIX秒
console.log(dt.toUNIXms());                        // UNIXミリ秒
console.log(dt.toJD());                            // JD
console.log(dt.toString(N6LDate.N6LDATE_FMT_ISO)); // ISO形式
console.log(dt.adjustCalendar(1).toString());      // 1日加算修正
console.log(dt.addDays(-1.25).toString());         // -1.25日加算
console.log(dt.diffDays(target));                  // 差分日数

メンバ関数一覧

目次に戻る

//Programed by NAS6
//date.js

class N6LDate {

//var dt = new N6LDate().normalize();のように.normalize()を必ずつけてください
constructor(ya, ma, da, ho, mo, so, ms, region = "DEFAULT", regionW = "DEFAULT")
//クローン
clone()
tempPDays(val)
adjustTime(val)

//通算日数取得(ユリウス暦・グレゴリオ暦自動処理)誤差含む
//また正確な経過日数はnormalize()かadjustCalendar()後N6LDate.pastdayかN6LDate.msから取得してください
calendarToDay(val, flg = false)

//前日に変換
suboneday(val)
//日付解析
parseDate(str)

//週取得
getWeek()
//通算ミリセカンド取得チックタイム(元期1/1/1:0:0:0.000)
getMS()
//通算日数取得(元期1/1/1:0:0:0.000)
getPDays()
//時間取得
getTime()
//週番号
getWeekNumber()

//ISO Week Date(ISO 8601)
getISOWeekDate()
//ISO 8601 Time Duration(期間表記)
getISOTimeDuration(target)
//改暦情報
getReformInfo(region = "GB", lng = "DEFAULT")

//ユリウス暦グレゴリオ暦改暦
afterGregorian(val)
//当年閏年判定
isLeap(val, flg = true)
//月末判定
isMonthEnd(val)
//月末取得
getMonthEnd(val, flg = true)
//周期カウントアップ collection(y,ry,term) //通算閏年取得
getLeap(val)

//this内容変更含む
SetVal(val)

// 通算日からグレゴリオ暦の日付オブジェクトを生成する
gregorianDayToDate(targetDay, flg = true)
// ユリウス暦加算処理(通算日からユリウス暦の日付オブジェクトを生成)
julianDayToDate(targetDay, flg = false)
// 日付調整処理(ユリウス暦・グレゴリオ暦自動処理)
adjustCalendar(rh = null)
//[!!!通算ミリ秒!!!][日時週]正規化
//this内容変更含む
// 自身の日付・時間を正規化する(再帰を起こさない安全な実装)
normalize()

// 差分ミリセカンド取得 (this - target)
diffMS(target)
// 差分日数取得 (this - target)
diffDays(target)
// 差分構造体取得 (this - target)
diffDuration(target)

//比較演算
isBefore(target)
isAfter(target)
isEqual(target, eps = 1e-6)

// N6LDate 標準フォーマット定数
// toString(fmtsw) のプリセット指定子として使用する
static get N6LDATE_FMT_DEFAULT() { return 0; } // "2026/07/29(水) 04:55:04.123"
static get N6LDATE_FMT_FULL() { return 1; } // "2026/07/29 04:55:04.123 (水)"
static get N6LDATE_FMT_NW() { return 2; } // "2026/07/29 04:55:04.123"
static get N6LDATE_FMT_DATE() { return 3; } // "2026/07/29(水)"
static get N6LDATE_FMT_DATE_NW() { return 4; } // "2026/07/29"
static get N6LDATE_FMT_ISO() { return 5; } // "2026-07-29(水) T 04:55:04.123 Z"
static get N6LDATE_FMT_ISO_W() { return 6; } // "2026-07-29 T 04:55:04.123 Z (水)"
static get N6LDATE_FMT_ISO_NW() { return 7; } // "2026-07-29 T 04:55:04.123 Z"
static get N6LDATE_FMT_ISO_D() { return 8; } // "2026-07-29(水)"
static get N6LDATE_FMT_ISO_D_NW() { return 9; } // "2026-07-29"

// フォーマット出力 (例: "2026/07/29 04:55:04 水")
toString(fmtsw = 0)
// カスタムフォーマット出力
// 例: date.format("YYYY-MM-DD hh:mm:ss.SSS (W)")
format(pattern)

// Dateオブジェクト出力
toDate()
// Temporalオブジェクト出力
toTemporal()
//現在日時でクリエイト
Now()

// ユリウス日
toJD()
fromJD(rh)
// 修正ユリウス日
toMJD()
fromMJD(rh)
// ユニックス時間秒
toUNIX()
fromUNIX(rh)
// ユニックス時間ミリ秒
toUNIXms()
fromUNIXms(rh)

//シリアライズ
//const dt = new N6LDate(2030, 9, 15, 12, 34, 56, 789).normalize();
//dt.region = "JP";
//const json = JSON.stringify(dt); // toJSONが自動呼び出し
// → {"year":2030,"month":9,"day":15,...}
//const restored = N6LDate.fromJSON(JSON.parse(json));
//console.log(restored.toString()); // 2030/09/15(Sun) 12:34:56.789
toJSON()
static fromJSON(json)
startOf(unit)
endOf(unit)

// 各種加算//引数を少数を含む経過日にしてadjustCalendarを叩くだけ
addYears(rh)
addMonths(rh)
addDays(rh)
addHours(rh)
addMinutes(rh)
addSeconds(rh)
addMSs(rh)
}


ライセンス

licence:GPL-3.0

目次に戻る
NAS6LIB リポジトリに戻る [Wiki 外のリンク]

Clone this wiki locally