...省略...
<script src="./javascripts/nas6lib/date.js"></script>
<script>
function calc() {
// ######### TestCode Start #########
//イリーガルな初期化
const dtz = new N6LDate(2000,15.5,55.5,30).normalize();
console.log(dtz.toString());
// → 2001/05/10(Thu) 06:00:00.000
//日付加算
const dta = new N6LDate(1582,10,4).normalize();
console.log(dta.addDays(1).toString());
// → 1582/10/15(Fri) 00:00:00.000
const dtb = new N6LDate(2026,10,1,6).normalize();
console.log(dtb.addMonths(-1.5).toString());
// → 2026/08/16(Sun) 08:23:47.040
const dtc = new N6LDate(2026,12,15,6).normalize();
console.log(dtc.addYears(1.25).toString());
// → 2028/03/15(Wed) 19:30:00.000
//時刻加算
const dtd = new N6LDate(2026,7,15,12).normalize();
console.log(dtd.toString());
// → 2026/07/15(Wed) 12:00:00.000
console.log(dtd.addDays(0.75).toString());
// → 2026/07/16(Thu) 06:00:00.000
const dte = new N6LDate(2026,7,15,12).normalize();
console.log(dte.addHours(18).toString());
// → 2026/07/16(Thu) 06:00:00.000
//改暦デフォルト
const a = new N6LDate(1582,10,4).normalize();
const b = new N6LDate(1582,10,15).normalize();
console.log(b.diffDays(a)); // +1
console.log(a.diffDays(b)); // -1
//改暦日本
const jedjp = new N6LDate(1582,10,4,0,0,0,0,"JP").normalize();
const gsdjp = new N6LDate(1582,10,15,0,0,0,0,"JP").normalize();
console.log(gsdjp.diffDays(jedjp)); // +1
console.log(jedjp.diffDays(gsdjp)); // -1
//改暦イギリス
const jedgb = new N6LDate(1752,9,2,0,0,0,0,"GB").normalize();
const gsdgb = new N6LDate(1752,9,14,0,0,0,0,"GB").normalize();
console.log(gsdgb.diffDays(jedgb)); // +1
console.log(jedgb.diffDays(gsdgb)); // -1
//改暦ロシア
const jedru = new N6LDate(1918,1,31,0,0,0,0,"RU").normalize();
const gsdru = new N6LDate(1918,2,14,0,0,0,0,"RU").normalize();
console.log(gsdru.diffDays(jedru)); // +1
console.log(jedru.diffDays(gsdru)); // -1
//改暦ギリシャ
const jedgr = new N6LDate(1923,2,15,0,0,0,0,"GR").normalize();
const gsdgr = new N6LDate(1923,3,1,0,0,0,0,"GR").normalize();
console.log(gsdgr.diffDays(jedgr)); // +1
console.log(jedgr.diffDays(gsdgr)); // -1
//各種変換
const jp2000 = new N6LDate(2000,1,1,0,0,0,0,"JP").normalize();
console.log(jp2000.toString()); // 2000/01/01(Sat) 00:00:00.000
const jdjp2000 = jp2000.toJD();
console.log(jdjp2000); // 2451544.5
const fmjdjp2000 = jp2000.fromJD(jdjp2000);
console.log(fmjdjp2000.toString()); // 2000/01/01(Sat) 00:00:00.000
const uxjp2000 = jp2000.toUNIX();
console.log(uxjp2000); // 946684800
const fmuxjp2000 = jp2000.fromUNIX(uxjp2000);
console.log(fmuxjp2000.toString()); // 2000/01/01(Sat) 00:00:00.000
const ru2000 = new N6LDate(2000,1,1,0,0,0,0,"RU").normalize();
console.log(ru2000.toString()); // 2000/01/01(Sat) 00:00:00.000
const jdru2000 = ru2000.toJD();
console.log(jdru2000); // 2451544.5
const fmjdru2000 = ru2000.fromJD(jdru2000);
console.log(fmjdru2000.toString()); // 2000/01/01(Sat) 00:00:00.000
//平年100年400年検証
const jp19000228 = new N6LDate(1900,2,28,0,0,0,0,"JP").normalize();
console.log(jp19000228.toString()); // 1900/02/28(Wed) 00:00:00.000
const jdjp19000228 = jp19000228.toJD();
console.log(jdjp19000228); // 2415078.5
const fmjdjp19000228 = jp19000228.fromJD(jdjp19000228);
console.log(fmjdjp19000228.toString()); // 1900/02/28(Wed) 00:00:00.000
const jp19000229 = new N6LDate(1900,2,29,0,0,0,0,"JP").normalize();
console.log(jp19000229.toString()); // 1900/03/01(Thu) 00:00:00.000
const jdjp19000229 = jp19000229.toJD();
console.log(jdjp19000229); // 2415079.5
const fmjdjp19000229 = jp19000229.fromJD(jdjp19000229);
console.log(fmjdjp19000229.toString()); // 1900/03/01(Thu) 00:00:00.000
const jp19000301 = new N6LDate(1900,3,1,0,0,0,0,"JP").normalize();
console.log(jp19000301.toString()); // 1900/03/01(Thu) 00:00:00.000
const jdjp19000301 = jp19000301.toJD();
console.log(jdjp19000301); // 2415079.5
const fmjdjp19000301 = jp19000301.fromJD(jdjp19000301);
console.log(fmjdjp19000301.toString()); // 1900/03/01(Thu) 00:00:00.000
const jp20000228 = new N6LDate(2000,2,28,0,0,0,0,"JP").normalize();
console.log(jp20000228.toString()); // 2000/02/28(Mon) 00:00:00.000
const jdjp20000228 = jp20000228.toJD();
console.log(jdjp20000228); // 2451602.5
const fmjdjp20000228 = jp20000228.fromJD(jdjp20000228);
console.log(fmjdjp20000228.toString()); // 2000/02/28(Mon) 00:00:00.000
const jp20000229 = new N6LDate(2000,2,29,0,0,0,0,"JP").normalize();
console.log(jp20000229.toString()); // 2000/02/29(Tue) 00:00:00.000
const jdjp20000229 = jp20000229.toJD();
console.log(jdjp20000229); // 2451603.5
const fmjdjp20000229 = jp20000229.fromJD(jdjp20000229);
console.log(fmjdjp20000229.toString()); // 2000/02/29(Tue) 00:00:00.000
const jp20000301 = new N6LDate(2000,3,1,0,0,0,0,"JP").normalize();
console.log(jp20000301.toString()); // 2000/03/01(Wed) 00:00:00.000
const jdjp20000301 = jp20000301.toJD();
console.log(jdjp20000301); // 2451604.5
const fmjdjp20000301 = jp20000301.fromJD(jdjp20000301);
console.log(fmjdjp20000301.toString()); // 2000/03/01(Wed) 00:00:00.000
const jp20010228 = new N6LDate(2001,2,28,0,0,0,0,"JP").normalize();
console.log(jp20010228.toString()); // 2001/02/28(Wed) 00:00:00.000
const jdjp20010228 = jp20010228.toJD();
console.log(jdjp20010228); // 2451968.5
const fmjdjp20010228 = jp20010228.fromJD(jdjp20010228);
console.log(fmjdjp20010228.toString()); // 2001/02/28(Wed) 00:00:00.000
const jp20010229 = new N6LDate(2001,2,29,0,0,0,0,"JP").normalize();
console.log(jp20010229.toString()); // 2001/03/01(Thu) 00:00:00.000
const jdjp20010229 = jp20010229.toJD();
console.log(jdjp20010229); // 2451969.5
const fmjdjp20010229 = jp20010229.fromJD(jdjp20010229);
console.log(fmjdjp20010229.toString()); // 2001/03/01(Thu) 00:00:00.000
const jp20010301 = new N6LDate(2001,3,1,0,0,0,0,"JP").normalize();
console.log(jp20010301.toString()); // 2001/03/01(Thu) 00:00:00.000
const jdjp20010301 = jp20010301.toJD();
console.log(jdjp20010301); // 2451969.5
const fmjdjp20010301 = jp20010301.fromJD(jdjp20010301);
console.log(fmjdjp20010301.toString()); // 2001/03/01(Thu) 00:00:00.000
const jp2000715 = new N6LDate(2000,7,15).normalize();
console.log(jp2000715.getISOWeekDate()); // {isoYear: 2000, isoWeek: 29, isoWeekDay: 3}
const jp2010715 = new N6LDate(2010,7,15).normalize();
console.log(jp2000715.getISOTimeDuration(jp2010715)); // -P9Y11M28DT3H34M24.960S
console.log(jp2000715.getReformInfo()); //In UK, due to the calendar reform, the day following 1752-09-02 was 1752-09-14, and 11 days were skipped.
console.log(jp2000715.format("YYYY-MM-DD hh:mm:ss.SSS (W)")); // 2000-07-15 00:00:00.000 (Sat)
jp2000715.regionW = "JP";
console.log(jp2000715.format("YYYY年 MMMM月 DD日 (W)")); // 2000年 7月 15日 (土)
const jp2030915 = new N6LDate(2030,9,15,12).normalize();
console.log(jp2030915.toString()); //2030/09/15(Sun) 12:00:00.000
const uxjp2030915 = jp2030915.toUNIX(jp2030915);
console.log(uxjp2030915); //1915704000
const fmuxjp2030915 = jp2030915.fromUNIX(uxjp2030915);
console.log(fmuxjp2030915.toString()); //2030/09/15(Sun) 12:00:00.000
const ctuxjp2030915 = new N6LDate(uxjp2030915*1000).normalize();
console.log(ctuxjp2030915.toString()); //2030/09/15(Sun) 12:00:00.000
//シリアライズ
const dtSz = new N6LDate(2030, 9, 15, 12, 34, 56, 789).normalize();
dtSz.region = "JP";
const json = JSON.stringify(dtSz); // 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
const jp20150606 = new N6LDate(2015, 6, 6, 12, 34, 56, 789).normalize();
console.log(jp20150606.startOf("day").toString()); //2015/06/06(Sat) 00:00:00.000
console.log(jp20150606.startOf("month").toString()); //2015/06/01(Mon) 00:00:00.000
console.log(jp20150606.startOf("year").toString()); //2015/01/01(Thu) 00:00:00.000
console.log(jp20150606.startOf("week").toString()); //2015/06/01(Mon) 00:00:00.000
console.log(jp20150606.endOf("day").toString()); //2015/06/06(Sat) 23:59:59.999
console.log(jp20150606.endOf("month").toString()); //2015/06/30(Tue) 23:59:59.999
console.log(jp20150606.endOf("year").toString()); //2015/12/31(Thu) 23:59:59.999
console.log(jp20150606.endOf("week").toString()); //2015/06/07(Sun) 23:59:59.999
// ######### TestCode End #########
var element = document.getElementById('REGION');
var reg = element.value;
var elm = document.getElementById('TXTY0');
var y0 = Number(elm.value);
elm = document.getElementById('TXTM0');
var m0 = Number(elm.value);
elm = document.getElementById('TXTD0');
var d0 = Number(elm.value);
elm = document.getElementById('TXTY1');
var y1 = Number(elm.value);
elm = document.getElementById('TXTM1');
var m1 = Number(elm.value);
elm = document.getElementById('TXTD1');
var d1 = Number(elm.value);
elm = document.getElementById('TXTDT');
var dt = Number(elm.value);
// 基準日(日付0)のインスタンス生成
var val0 = new N6LDate(y0, m0, d0, 0, 0, 0, 0, reg).normalize();
var val;
var dadd = 0;
var daddms = 0;
if (0 < y1) {
// 日付1が有効な場合:
// 「日付1 - 日付0」の差分日数に、入力された加算日数(dt)を足したものがトータルの加算日数
var val1 = new N6LDate(y1, m1, d1, 0, 0, 0, 0, reg).normalize();
dadd = val1.diffDays(val0) + dt;
val = val0.addDays(dadd);
} else {
// 日付1が無効(未指定など)の場合:
// 日付0を基準に加算日数(dt)のみを反映
dadd = dt;
val = val0.addDays(dadd);
dadd += val.pastdays;
}
daddms = dadd * val0.DayMS;
// 結果の画面反映
elm = document.getElementById('TXTCL');
elm.value = val.afterGregorian(val) ? "グレゴリオ暦" : "ユリウス暦";
elm = document.getElementById('TXTYA');
elm.value = val.ya;
elm = document.getElementById('TXTMA');
elm.value = val.ma;
elm = document.getElementById('TXTDA');
elm.value = val.da;
elm = document.getElementById('TXTDTA');
elm.value = dadd;
elm = document.getElementById('TXTWKA');
elm.value = val.weeks[Number(val.wk)];
elm = document.getElementById('TXTMSA');
elm.value = daddms;
}
function now() {
var dt = new Date();
var year = dt.getFullYear();
var month = dt.getMonth() + 1; // getMonth() is 0-indexed, so add 1 for actual month
var day = dt.getDate();
var elm = document.getElementById('TXTY0');
elm.value = year;
elm = document.getElementById('TXTY1');
elm.value = year;
elm = document.getElementById('TXTM0');
elm.value = month;
elm = document.getElementById('TXTM1');
elm.value = month;
elm = document.getElementById('TXTD0');
elm.value = day;
elm = document.getElementById('TXTD1');
elm.value = day;
}
function newyear() {
elm = document.getElementById('TXTM0');
elm.value = 1;
elm = document.getElementById('TXTM1');
elm.value = 1;
elm = document.getElementById('TXTD0');
elm.value = 1;
elm = document.getElementById('TXTD1');
elm.value = 1;
}
function cls(i) {
var elm;
if(i == 1) {
elm = document.getElementById('TXTY0');
elm.value = 1;
elm = document.getElementById('TXTM0');
elm.value = 1;
elm = document.getElementById('TXTD0');
elm.value = 1;
}
else {
elm = document.getElementById('TXTY1');
elm.value = -1;
elm = document.getElementById('TXTM1');
elm.value = 1;
elm = document.getElementById('TXTD1');
elm.value = 1;
}
}
</script>
...省略...
<hr>
<br>
日付0<br>
西暦(自動判別)<input type="text" id="TXTY0" value="1">年 <input type="text" id="TXTM0" value="1">月 <input type="text" id="TXTD0" value="1">日<br>
日付1<br>
西暦(自動判別)<input type="text" id="TXTY1" value="-1">年 <input type="text" id="TXTM1" value="1">月 <input type="text" id="TXTD1" value="1">日<br>
加算日数<input type="text" id="TXTDT" value="0">日<br>
<br>
解答<br>
<input type="text" id="TXTCL" value="ユリウス暦" disabled><br>
<input type="text" id="TXTYA" value="1" disabled>年 <input type="text" id="TXTMA" value="1" disabled>月 <input type="text" id="TXTDA" value="1" disabled>日<br>
曜日<input type="text" id="TXTWKA" value="土" disabled>曜日<br>
経過日数<input type="text" id="TXTDTA" value="0" disabled>日<br>
経過ミリ秒<input type="text" id="TXTMSA" value="0" disabled>ミリ秒<br>
<br>
<input type="button" onclick="calc()" value="計 算"> <input type="button" onclick="now()" value="現在日時"> <input type="button" onclick="newyear()" value="1月1日">
<input type="button" onclick="cls(1)" value="1クリア"> <input type="button" onclick="cls(2)" value="2クリア"><br>
<hr>
...省略...