Zeitzonen-Konvertierungen und ESLint gemeinsam ausprobieren
Ein einzelner Zeitpunkt kann zu unterschiedlichen Kalenderdaten gehören. Beobachten Sie zunächst diesen Unterschied und lassen Sie ESLint anschließend Code melden, der versehentlich auf die Zeitzone des Hosts zurückfällt.
1. Beide Pakete installieren
Benötigt Node.js 24 und npm.
mkdir timezone-demo
cd timezone-demo
npm init -y
npm pkg set type=module
npm install @rdlabo/workers-timezone@0.12.2
npm install --save-dev @rdlabo/eslint-plugin-rules@22.1.0 eslint@10 @eslint/js@10 typescript@6 typescript-eslint@8 tsx@4
2. Den Wechsel des Kalenderdatums beobachten
Speichern Sie dies als demo.ts. Initialisieren Sie die Anwendungszeitzone einmal auf Modulebene. Übergeben Sie für eine nutzerspezifische Konvertierung eine Zeitzone pro Aufruf.
import { initializeTimezone, toLocalDate, toLocalDateTime } from '@rdlabo/workers-timezone';
initializeTimezone({ timeZone: 'Asia/Tokyo' });
const instant = new Date('2026-01-01T15:00:00Z');
console.log(toLocalDateTime(instant));
console.log(toLocalDate(instant, 'America/New_York'));
npx tsx demo.ts
2026-01-02 00:00:00
2026-01-01
Derselbe Zeitpunkt liegt in Tokio am 2. Januar und in New York am 1. Januar. Ergänzen Sie ein ausdrückliches Zeitzonenargument für eine andere Stadt, um den Unterschied zu untersuchen.
3. Eine versehentliche Regression sichtbar machen
Speichern Sie dies als tsconfig.json, damit typgestütztes Linting demo.ts finden kann:
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"strict": true,
"noEmit": true
},
"include": ["demo.ts"]
}
Speichern Sie dies als eslint.config.mjs. Beschränken Sie typgestützte Konfiguration auf TypeScript-Dateien:
import { dirname } from 'node:path';
import { fileURLToPath } from 'node:url';
import eslint from '@eslint/js';
import tseslint from 'typescript-eslint';
import rdlabo from '@rdlabo/eslint-plugin-rules/typescript';
export default tseslint.config(
eslint.configs.recommended,
{
files: ['**/*.ts'],
extends: [...tseslint.configs.recommendedTypeChecked],
languageOptions: {
parserOptions: {
projectService: true,
tsconfigRootDir: dirname(fileURLToPath(import.meta.url)),
},
},
plugins: { '@rdlabo/rules': rdlabo },
},
...rdlabo.configs['workers-timezone/recommended'],
);
Prüfen Sie das korrekte Beispiel:
npx eslint demo.ts
Es sollte ohne Diagnosemeldungen erfolgreich beendet werden. Ergänzen Sie jetzt die folgende absichtlich falsche Zeile in demo.ts:
console.log(instant.getDate());
npx eslint demo.ts
Zu erwarten sind ein Exit-Status ungleich null und @rdlabo/rules/no-implicit-timezone. getDate() liest den lokalen Kalendertag des Hosts und umgeht damit die Anwendungszeitzone. Ersetzen Sie ausschließlich die hinzugefügte Zeile durch:
console.log(toLocalDate(instant));
npx eslint demo.ts
npx tsx demo.ts
Lint sollte wieder erfolgreich sein. Die zuletzt hinzugefügte Zeile gibt 2026-01-02 aus.
4. In Ihrer Anwendung verwenden
Folgen Sie der Anwendungseinrichtung, um die Standardzeitzone zu wählen, und aktivieren Sie anschließend ESLint in CI. Nutzerspezifische Einstellungen, Sommerzeit und Datenbankgrenzen beschreibt Zeitzonen und Kalenderdaten.