Waqt

Für Entwickler

Afghanisches Datum und Uhrzeit für Ihr Programm

Der Schamsi- und der Qamari-Kalender, Monatsnamen in sieben Sprachen und Sonnenauf- und -untergang in jeder Provinzhauptstadt: ein paar einfache Dateien und ein JavaScript-Modul. Ohne Schlüssel, ohne Anmeldung.

Version 1JSON und JavaScriptBeispiele in JavaScript und PHP

Auf dieser Seite

Kurz gesagtAlle Dateien liegen unter waqt.qudqu.com/api/v1/ und lassen sich von jeder Website laden. Jede entsteht aus demselben Code, mit dem diese Seite läuft, deshalb nennen API und Seite nie zwei verschiedene Datumsangaben. Kein iranischer Monatsname steht darin.

Schnellstart

Ein import in einem <script type="module"> genügt: keine Installation, kein Schlüssel, keine Anmeldung. Dieser Code ist gerade in Ihrem Browser gelaufen; das heutige Ergebnis steht unter jeder Zeile.

quick-start.htmlHTML
Gerade ausgeführt
<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>

Die Dateien

DateiWas sie enthältGröße
calendar.jsonDie Jahrestabellen von Schamsi und Qamari, was eine Tagesnummer ist, die afghanische Zeit3 KB
names.jsonDie Monate der drei Kalender, die Wochentage und die Ziffern, in sieben Sprachen3 KB
places.jsonDie 34 Provinzhauptstädte: Koordinaten, die Namen von Stadt und Provinz in sieben Sprachen4 KB
sun/kabul.jsonDie Sonne an jedem Tag des Schamsi-Jahres; eine Datei für jede Provinzhauptstadt4 KB
waqt.jsDas JavaScript-Modul: Datumsangaben umrechnen und schreiben, afghanische Zeit, Sonne und Mond20 KB
Größen komprimiert (gzip), so wie ein Browser sie empfängt. Jede JSON-Datei sagt in ihrer description, wie sie zu lesen ist.

Umrechnen mit Tagesnummern

Jedes Datum hat eine Tagesnummer: die Tage seit dem 1. Januar 1970. Alle drei Kalender lassen sich in Tagesnummern umrechnen und zurück, so kommt ein Datum über seine Tagesnummer von einem Kalender in den anderen.

Das Modul macht das mit einer Funktion. Ohne das Modul ist es auch einfach: Suchen Sie in calendar.json das letzte Jahr, das an diesem Tag oder davor beginnt, und zählen Sie dann die Monate.

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);

Das Qamari-Datum und die Mondsichtung

Die Qamari-Tabelle ist der Umm-al-Qura-Kalender. In Afghanistan beginnt ein Qamari-Monat, wenn die neue Mondsichel gesehen wird, und das lässt sich nicht im Voraus berechnen: Ein Datum weicht manchmal um einen Tag von der Tabelle ab. Begann ein Monat einen Tag später, als die Tabelle sagt, lesen Sie die Tabelle am Tag davor (Tagesnummer minus 1); begann er einen Tag früher, am Tag danach. Die Funktionen des Moduls nehmen dasselbe als HijriAdjustment.DAY_LATER oder HijriAdjustment.DAY_EARLIER.

Monats- und Wochentagsnamen in sieben Sprachen

names.json enthält für jede Sprache die Monate der drei Kalender, die Wochentage ab Samstag, „vormittags“ und „nachmittags“, die Namen der Kalender und die Ziffern der Sprache. Paschto hat eigene Monatsnamen; die anderen Sprachen schreiben die Dari-Namen in ihrer eigenen Schrift.

Kein iranischer Monatsname steht in diesen Dateien, und unsere Tests prüfen jeden Tag in jeder Sprache. Nehmen Sie die Namen aus dieser Datei, nicht vom Browser: Viele Browser zeigen für Afghanistan iranische Namen.

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

Sonnenaufgang und Sonnenuntergang

Für jede Provinzhauptstadt gibt es eine Tabelle: erstes Licht, Sonnenaufgang, Sonnenhöchststand, Sonnenuntergang, Dunkelheit und die Tageslänge, für jeden Tag des Schamsi-Jahres, in afghanischer Zeit. Die Tabelle gilt für jedes Jahr auf 2 Minuten genau, denn das Schamsi-Jahr folgt der Sonne.

Für die genaue Minute in einem bestimmten Jahr oder für jeden anderen Ort nehmen Sie sunDay. Die Formel dazu steht hier auch in 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' ]

Der Mond

Das Modul gibt die Stellung des Mondes am Himmel von jedem Ort aus, wie viel von ihm beleuchtet ist, seinen Auf- und Untergang an jedem Tag und den nächsten Neu- und Vollmond. Für die Sichtung der ersten Sichel eines Monats ist es nicht gedacht.

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

Version 1: was sich nicht ändert

  • Die Dateien behalten ihre Form. Es kann etwas hinzukommen, aber kein Name wird entfernt oder geändert. Eine Änderung, die diese Regel nicht einhält, wird /api/v2/, und Version 1 bleibt.
  • Vom 1. Januar 1900 bis zum 25. November 2174 (Schamsi 1278 bis 1553, Qamari 1317 bis 1600). Außerhalb davon geben die Funktionen einen Fehler.
  • Von jeder Website. Die Dateien werden mit Access-Control-Allow-Origin: * gesendet, und Browser behalten sie 10 Minuten.
  • Keine Statistik, keine Cookies. Die Dateien setzen keine Cookies und sammeln keine Statistiken.

Lizenz

Lizenz: CC BY 4.0

Einen Fehler gesehen, oder fehlt etwas? Schreiben Sie uns.