PHP 8.4.1 Released!

DateTimeImmutable::__construct

date_create_immutable

(PHP 5 >= 5.5.0, PHP 7, PHP 8)

DateTimeImmutable::__construct -- date_create_immutableRetorna um novo objeto DateTimeImmutable

Descrição

Estilo orientado a objetos

public DateTimeImmutable::__construct(string $datetime = "now", ?DateTimeZone $timezone = null)

Estilo procedural

Retorna um novo objeto DateTimeImmutable.

Parâmetros

datetime

Uma string de data/hora. Os formatos válidos são explicados em Formatos de Data e Hora.

Utilize "now" para obter o horário atual quando usar o parâmetro$timezone.

timezone

Um objeto DateTimeZone representando o fuso horário do parâmetro $datetime.

Se $timezone for null ou omitido, o fuso horário atual será utilizado.

Nota:

O parâmetro $timezone e o fuso horário atual são ignorados quando o parâmetro $datetime for um timestamp UNIX (ex.: @946684800) ou especificar um fuso horário (ex.: 2010-01-28T15:00:00+02:00 ou 2010-07-05T06:00:00Z).

Valor Retornado

Retorna uma nova instância de DateTimeImmutable.

Erros/Exceções

Se um string inválido de data/hora for passado, uma exceção DateMalformedStringException é disparada. Antes do PHP 8.3, era Exception.

Registro de Alterações

Versão Descrição
8.3.0 Agora dispara DateMalformedStringException se uma string inválida for passada, em vez de Exception.
7.1.0 De agora em diante os microssegundos são preenchidos com o valor real. Não mais com '00000'.

Exemplos

Exemplo #1 Exemplo da função DateTimeImmutable::__construct()

Estilo orientado a objetos

<?php
try {
$date = new DateTimeImmutable('2000-01-01');
} catch (
Exception $e) {
echo
$e->getMessage();
exit(
1);
}

echo
$date->format('Y-m-d');
?>

Estilo procedural

<?php
$date
= date_create('2000-01-01');
if (!
$date) {
$e = date_get_last_errors();
foreach (
$e['errors'] as $error) {
echo
"$error\n";
}
exit(
1);
}

echo
date_format($date, 'Y-m-d');
?>

Os exemplos acima produzirão:

2000-01-01

Exemplo #2 Complexidades de DateTimeImmutable::__construct()

<?php
// Data/hora especificada no fuso horário do seu computador.
$date = new DateTimeImmutable('2000-01-01');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Data/hora especificada no fuso horário informado.
$date = new DateTimeImmutable('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Data/hora atual no fuso horário do seu computador.
$date = new DateTimeImmutable();
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Data/hora atual no fuso horário informado.
$date = new DateTimeImmutable('now', new DateTimeZone('Pacific/Nauru'));
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Usando um timestamp UNIX. Note que o resultado é no fuso horário UTC.
$date = new DateTimeImmutable('@946684800');
echo
$date->format('Y-m-d H:i:sP') . "\n";

// Valores não existentes são transferidos.
$date = new DateTimeImmutable('2000-02-30');
echo
$date->format('Y-m-d H:i:sP') . "\n";
?>

O exemplo acima produzirá algo semelhante a:

2000-01-01 00:00:00-05:00
2000-01-01 00:00:00+12:00
2010-04-24 10:24:16-04:00
2010-04-25 02:24:16+12:00
2000-01-01 00:00:00+00:00
2000-03-01 00:00:00-05:00

Exemplo #3 Mudando o fuso horário associado

<?php
$timeZone
= new \DateTimeZone('Asia/Tokyo');

$time = new \DateTimeImmutable();
$time = $time->setTimezone($timeZone);

echo
$time->format('Y/m/d H:i:s'), "\n";
?>

O exemplo acima produzirá algo semelhante a:

2022/08/12 23:49:23

Exemplo #4 Usando uma string relativo de data/hora

<?php
$time
= new \DateTimeImmutable("-1 year");

echo
$time->format('Y/m/d H:i:s'), "\n";
?>

O exemplo acima produzirá algo semelhante a:

2021/08/12 15:43:51
adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
1
Dmitrii
1 year ago
"If $timezone is omitted or null, the current timezone will be used." - note, that timezone IS NOT equal offset, if its important for your application.

If default timezone = Europe/Moscow, then:
echo (new \DateTimeImmutable('2014-10'))->format(DATE_ATOM); // gives "2014-10-01T00:00:00+04:00"
echo (new \DateTimeImmutable('2014-11'))->format(DATE_ATOM); // gives "2014-11-01T00:00:00+03:00"
because of law changes (abolition of "summer time").
To Top