Waqt

開発者向け

あなたのプログラムにアフガニスタンの日付と時刻を

太陽ヒジュラ暦と太陰ヒジュラ暦、7言語の月名、各州都の日の出と日の入り。いくつかのシンプルなファイルと、JavaScriptモジュールがひとつ。キーも登録も不要です。

バージョン1JSON と JavaScriptJavaScript と PHP の例

このページの内容

要点すべてのファイルは waqt.qudqu.com/api/v1/ にあり、どのサイトからでも読み込めます。どれもこのサイトと同じコードから作られているので、APIとサイトが違う日付を出すことはありません。イランの月名はどこにも含まれていません。

クイックスタート

<script type="module"> の中に import を一行書くだけです。インストールもキーも登録もいりません。このコードはたった今あなたのブラウザで実行され、各行の下に今日の結果が出ています。

quick-start.htmlHTML
たった今実行
<script type="module">
	import { Calendar, Language, formatDate, wallTime }
		from 'https://waqt.qudqu.com/api/v1/waqt.js';

	// Today on Afghan time, as a day number
	const today = wallTime(Date.now()).day;

	console.log(formatDate(today, Calendar.SHAMSI, Language.DARI).text);
	// → …
	console.log(formatDate(today, Calendar.QAMARI, Language.PASHTO).text);
	// → …
	console.log(formatDate(today, Calendar.GREGORIAN, Language.ENGLISH).text);
	// → …
</script>

ファイル

ファイル内容サイズ
calendar.json太陽ヒジュラ暦と太陰ヒジュラ暦の年の表、日番号とは何か、アフガニスタン時間3 KB
names.json3つの暦の月、曜日、数字(7言語)3 KB
places.json34の州都:座標、市と州の名前(7言語)4 KB
sun/kabul.json太陽ヒジュラ暦の毎日の太陽。州都ごとにファイルがひとつ4 KB
waqt.jsJavaScriptモジュール:日付の変換と表記、アフガニスタン時間、太陽と月20 KB
サイズは圧縮後(gzip)、ブラウザが受け取る大きさです。JSONファイルはそれぞれ description に読み方を書いています。

日番号で日付を変換する

すべての日付には日番号があります。1970年1月1日からの日数です。3つの暦はどれも日番号との間で変換できるので、日付は日番号を通じてある暦から別の暦へ移ります。

モジュールなら関数ひとつです。モジュールなしでも簡単です。calendar.json で、その日かそれ以前に始まる最後の年を探し、あとは月を数えます。

import {
	Calendar, Digits, HijriAdjustment, Language,
	formatDate, fromGregorian, fromShamsi,
	toGregorian, toQamari, toShamsi, wallTime
} from 'https://waqt.qudqu.com/api/v1/waqt.js';

// A date is a day number: whole days since 1 January 1970
const nowruz = fromGregorian(2026, 3, 21);
console.log(nowruz);
// → 20533
console.log(toShamsi(nowruz));
// → { year: 1405, month: 1, day: 1 }
console.log(toQamari(nowruz));
// → { year: 1447, month: 10, day: 2 }
console.log(toGregorian(fromShamsi(1404, 12, 29)));
// → { year: 2026, month: 3, day: 20 }

// If the month began a day later in Afghanistan than in Umm al-Qura
console.log(toQamari(nowruz, HijriAdjustment.DAY_LATER));
// → { year: 1447, month: 10, day: 1 }

// As text, in any of the seven languages
console.log(formatDate(nowruz, Calendar.SHAMSI, Language.DARI).text);
// → ۱ حمل ۱۴۰۵
console.log(formatDate(nowruz, Calendar.SHAMSI, Language.PASHTO).text);
// → ۱ وری ۱۴۰۵
console.log(formatDate(nowruz, Calendar.QAMARI, Language.ENGLISH).text);
// → 2 Shawwal 1447

// With the weekday, in Latin digits
const options = { weekday: true, digits: Digits.LATIN };
console.log(formatDate(nowruz, Calendar.SHAMSI, Language.DARI, options).text);
// → شنبه، 1 حمل 1405

// Today, on Afghan time
const today = wallTime(Date.now()).day;
console.log(formatDate(today, Calendar.QAMARI, Language.DARI).text);

太陰ヒジュラ暦の日付と月の観測

太陰ヒジュラ暦の表はウンム・アル=クラー暦です。アフガニスタンでは新しい三日月が見えたときに月が始まり、これは前もって計算できません。そのため日付が表と1日ずれることがあります。月が表より1日遅く始まったら前日で(日番号から1を引いて)、1日早く始まったら翌日で表を読んでください。モジュールの関数は同じことを HijriAdjustment.DAY_LATER または HijriAdjustment.DAY_EARLIER として受け取ります。

7言語の月名と曜日名

names.json には言語ごとに、3つの暦の月、土曜日から始まる曜日、「午前」と「午後」、暦の名前、その言語の数字が入っています。パシュトー語には独自の月名があり、ほかの言語はダリー語の月名をそれぞれの文字で書きます。

これらのファイルにイランの月名はひとつもなく、テストで毎日をすべての言語で確かめています。月名はブラウザからではなく、このファイルから取ってください。多くのブラウザはアフガニスタンにイランの月名を表示します。

names.jsonJSON
{
  "languages": {
    "fa": {
      "months": {
        "shamsi": [
          "حمل", "ثور", "جوزا", "سرطان", "اسد", "سنبله",
          "میزان", "عقرب", "قوس", "جدی", "دلو", "حوت"
        ],
        "qamari": ["محرم", …],
        "gregorian": ["جنوری", …]
      },
      "weekdays": [
        "شنبه", "یکشنبه", "دوشنبه", "سه‌شنبه",
        "چهارشنبه", "پنجشنبه", "جمعه"
      ],
      "digits": "۰۱۲۳۴۵۶۷۸۹",
      …
    },
    "ps": {
      "months": {
        "shamsi": [
          "وری", "غویی", "غبرګولی", "چنګاښ", "زمری", "وږی",
          "تله", "لړم", "لیندۍ", "مرغومی", "سلواغه", "کب"
        ],
        "qamari": ["محرم", …],
        "gregorian": ["جنوري", …]
      },
      "weekdays": [
        "شنبه", "یکشنبه", "دوشنبه", "سه شنبه",
        "چهارشنبه", "پنجشنبه", "جمعه"
      ],
      "digits": "۰۱۲۳۴۵۶۷۸۹",
      …
    },
    "en": { "months": { "shamsi": ["Hamal", "Sawr", "Jawza", …] }, … },
    …
  }
}

日の出と日の入り

州都ごとに表があります。夜明け、日の出、南中、日の入り、暗くなる時刻、昼の長さを、太陽ヒジュラ暦の毎日について、アフガニスタン時間で載せています。太陽ヒジュラ暦は太陽に沿って進むので、この表はどの年にも2分以内で当てはまります。

ある年の正確な分や、ほかの場所には sunDay を使ってください。その計算式はここにPHPでも載せています。

// A sun table needs no code: months[m - 1][d - 1] is Shamsi month m, day d
const url = 'https://waqt.qudqu.com/api/v1/sun/herat.json';
const table = await (await fetch(url)).json();
console.log(table.columns);
// → [ 'firstLight', 'sunrise', 'noon', 'sunset', 'dark', 'dayLength' ]
console.log(table.months[0][0]); // 1 Hamal
// → [ '05:30', '06:25', '12:29', '18:33', '19:27', '12:08' ]

月

モジュールは、どこから見た月の空での位置、照らされている割合、毎日の月の出と月の入り、次の新月と満月を出します。月の始まりの三日月を観測するためのものではありません。

moon.jsJavaScript
import {
	MoonPhase, moonState, nextMoonPhase
} from 'https://waqt.qudqu.com/api/v1/waqt.js';

// The moon over Kabul on an evening (or moonState(ms, latitude, longitude))
const evening = Date.parse('2026-03-21T19:00:00+04:30');
const moon = moonState(evening);

// Percent lit, and days since the new moon
console.log(Math.round(moon.lit * 100), moon.age.toFixed(1));
// → 9 2.8

const full = nextMoonPhase(evening, MoonPhase.FULL);
console.log(new Date(full).toISOString().slice(0, 16));
// → 2026-04-02T02:14

バージョン1:変わらないこと

  • ファイルの形は変わりません。 何かが加わることはあっても、名前が消えたり変わったりはしません。この決まりに合わない変更は /api/v2/ になり、バージョン1は残ります。
  • 1900年1月1日から2174年11月25日まで(太陽ヒジュラ暦1278年から1553年、太陰ヒジュラ暦1317年から1600年)。この範囲の外では関数はエラーを出します。
  • どのサイトからでも。 ファイルは Access-Control-Allow-Origin: * つきで送られ、ブラウザは10分間保存します。
  • 統計もクッキーもなし。 ファイルはクッキーを使わず、統計も集めません。

ライセンス

ライセンス:CC BY 4.0

間違いを見つけたら、または足りないものがあれば、お知らせください。