Signatur
Beschreibung
Die Zugriffs-Eigenschaft hourCycle gibt an, welcher Stundenzyklus für eine Intl.Locale-Instanz gesetzt wurde. Der Stundenzyklus legt fest, ob die Uhrzeit im 12- oder 24-Stunden-Format angezeigt wird und bei welcher Zahl die Zählung beginnt:
"h11": 12-Stunden-Format, Zählung 0–11 (Mitternacht = 0:00 AM, z. B. in Japan gebräuchlich)"h12": 12-Stunden-Format, Zählung 1–12 (Mitternacht = 12:00 AM, z. B. in den USA)"h23": 24-Stunden-Format, Zählung 0–23 (Mitternacht = 0:00, z. B. in Deutschland)"h24": 24-Stunden-Format, Zählung 1–24 (Mitternacht = 24:00, selten)
Es gibt zwei Wege, den Wert zu setzen: über die Unicode-Erweiterung hc im Sprach-Tag (z. B. "de-DE-u-hc-h12") oder über die Option hourCycle im Konstruktor new Intl.Locale(tag, { hourCycle }). Wenn beide angegeben sind, gilt die Option im Konstruktor.
Wichtig: Die Eigenschaft liefert nicht den üblichen Stundenzyklus einer Region. Hat man keinen Wert ausdrücklich gesetzt, ist das Ergebnis undefined. Den tatsächlich verwendeten Zyklus erhält man über Intl.DateTimeFormat.prototype.resolvedOptions().hourCycle oder über Intl.Locale.prototype.getHourCycles().
Rückgabewert
-u-hc- noch die Option hourCycle angegeben, ist der Wert undefined.Beispiele
Stundenzyklus per Option und per Unicode-Erweiterung setzen
const perOption = new Intl.Locale('en-US', { hourCycle: 'h23' });
console.log(perOption.hourCycle);
console.log(perOption.toString());
const perTag = new Intl.Locale('de-DE-u-hc-h12');
console.log(perTag.hourCycle);
// Die Option im Konstruktor gilt vor der Erweiterung im Tag
const beides = new Intl.Locale('ja-JP-u-hc-h12', { hourCycle: 'h11' });
console.log(beides.hourCycle);
Fallstrick: ohne Angabe ist der Wert undefined – tatsächlichen Zyklus ermitteln
const locale = new Intl.Locale('de-DE');
console.log(locale.hourCycle); // nicht gesetzt
// Tatsächlich verwendeten Zyklus über DateTimeFormat ermitteln
const effektiv = new Intl.DateTimeFormat(locale, { hour: 'numeric' })
.resolvedOptions().hourCycle;
console.log(effektiv);
const zyklus = locale.hourCycle ?? effektiv;
console.log(zyklus);
Benutzereinstellung 12/24 Stunden bei der Zeitformatierung anwenden
const formatiereZeit = (datum, sprache, nutzt24h) => {
const locale = new Intl.Locale(sprache, {
hourCycle: nutzt24h ? 'h23' : 'h12'
});
return new Intl.DateTimeFormat(locale, {
hour: 'numeric',
minute: '2-digit'
}).format(datum);
};
const termin = new Date(2024, 4, 15, 14, 30);
console.log(formatiereZeit(termin, 'en-US', true));
console.log(formatiereZeit(termin, 'de-DE', false));
// Wichtig · Fallstricke
- Kein Standardwert:
hourCyclezeigt nicht, was in einer Region üblich ist. Ohne ausdrückliche Angabe ist der Wertundefined, auch bei"en-US". - Nur lesbar: Die Eigenschaft hat nur einen Getter. Eine Zuweisung wird ignoriert und löst im Strict Mode einen
TypeErroraus. Für einen anderen Wert erzeugt man eine neue Locale, z. B.new Intl.Locale(alt, { hourCycle: 'h23' }). - Ungültige Werte: Ein ungültiger Wert in der Option
hourCycle, etwa"h13", löst einenRangeErroraus. - Vorrang bei DateTimeFormat: Die Option
hour12vonIntl.DateTimeFormatgilt vorhourCycle, auch vor einem Wert, der aus der Locale kommt. Deshalb sollte man die beiden Optionen nicht mischen. - Kompatibilität:
Intl.LocalemithourCyclegibt es ab Chrome 74, Firefox 75, Safari 14 und Node.js 12. Die ergänzende MethodegetHourCycles()ist neuer und wird nicht überall unterstützt. Die ältere Zugriffs-EigenschafthourCyclesgibt es nur in einigen Browsern, und sie ist veraltet.