Pular para o conteúdo principal

Type Fields — Datas

Type Fields de data encapsulam valores Date com formatos ISO 8601 específicos. Todos estendem a classe abstrata FDate, que por sua vez estende TypeField<Date, string>.

Todos os campos de data aceitam tanto string quanto Date no método create(). O valor é armazenado internamente como Date e formatado conforme o formato específico via toString() e formatted().

Resumo

ClasseFormato de saídaExemploArquivo
FDateTimeISOZMillisYYYY-MM-DDTHH:mm:ss.sssZ2024-01-15T10:30:00.000Zdate.typefield.ts
FDateTimeISOZYYYY-MM-DDTHH:mm:ssZ2024-01-15T10:30:00Zdate.typefield.ts
FDateISODateYYYY-MM-DD2024-01-15date.typefield.ts
FDateISOCompactYYYYMMDD20240115date.typefield.ts
FDateTimeISOCompactYYYYMMDDTHH:mm:ss20240115T10:30:00date.typefield.ts
FDateTimeISOFullCompactYYYYMMDDHHmmss20240115103000date.typefield.ts

FDateTimeISOZMillis

Formato ISO 8601 completo com fuso Zulu e milissegundos. É o formato mais preciso disponível.

import { FDateTimeISOZMillis } from "tyforge";

// A partir de string
const result = FDateTimeISOZMillis.create("2024-01-15T10:30:00.000Z");
// Result<FDateTimeISOZMillis, ExceptionValidation>

// A partir de Date
const fromDate = FDateTimeISOZMillis.create(new Date());

// Gerar data atual como instância
const agora = FDateTimeISOZMillis.generate();
agora.toString(); // "2024-01-15T10:30:00.000Z"

// Gerar data atual como string (sem wrapper)
const str = FDateTimeISOZMillis.generateToString();
// "2024-01-15T10:30:00.000Z"

Métodos estáticos adicionais:

  • generate() — cria instância com new Date() atual
  • generateToString(date?) — retorna string formatada sem criar instância
  • createOrThrow(date) — lança exceção se a data for inválida

FDateTimeISOZ

Formato ISO 8601 UTC sem milissegundos.

import { FDateTimeISOZ } from "tyforge";

const result = FDateTimeISOZ.create("2024-01-15T10:30:00Z");
// Result<FDateTimeISOZ, ExceptionValidation>

const data = FDateTimeISOZ.createOrThrow(new Date());
data.toString(); // "2024-01-15T10:30:00Z"

Métodos estáticos adicionais:

  • generateDateString(date?) — retorna string no formato UTC sem milissegundos

FDateISODate

Formato ISO 8601 somente data (sem componente de hora).

import { FDateISODate } from "tyforge";

const result = FDateISODate.create("2024-01-15");
// Result<FDateISODate, ExceptionValidation>

const data = FDateISODate.createOrThrow("2024-01-15");
data.toString(); // "2024-01-15"

FDateISOCompact

Formato ISO 8601 compacto sem separadores.

import { FDateISOCompact } from "tyforge";

const result = FDateISOCompact.create("20240115");
// Result<FDateISOCompact, ExceptionValidation>

const data = FDateISOCompact.createOrThrow(new Date());
data.toString(); // "20240115"

FDateTimeISOCompact

Formato ISO 8601 compacto com separador T e hora.

import { FDateTimeISOCompact } from "tyforge";

const result = FDateTimeISOCompact.create("20240115T10:30:00");
// Result<FDateTimeISOCompact, ExceptionValidation>

FDateTimeISOFullCompact

Formato ISO 8601 totalmente compacto, sem nenhum separador.

import { FDateTimeISOFullCompact } from "tyforge";

const result = FDateTimeISOFullCompact.create("20240115103000");
// Result<FDateTimeISOFullCompact, ExceptionValidation>

Classe base FDate

Todas as classes de data estendem FDate, que fornece a infraestrutura comum:

abstract class FDate extends TypeField<Date, string> {
// Config compartilhado
static readonly config: ITypeFieldConfig<Date> = { jsonSchemaType: "Date" };

// Cada subclasse implementa a formatação
protected abstract formatValue(date: Date): string;

// toString(), formatted(), getDescription() e getShortDescription()
// delegam para formatValue()
}

O toJSON() de domain models com campos FDate respeita a configuração { date: 'string' | 'date' } — quando date: 'string', o valor é serializado via toString() no formato específico da subclasse.