php / php/php-src

DateTimeImmutable (and DateTime) modify does not respect Daylight Saving Time shifts

Abierto
#15,880 0 comentarios 0 reacciones 1 asignado Ver en GitHub

@derickr ya está trabajando en esto.

Desde el 13/9/2024.

Bug Extension: date Status: Needs Triage
Lenguaje dominante
C
Estrellas
40.4k
Forks
8.2k
Merge medio
2 d 13 h
PR fusionados (30 d)
96

Descripción

Description

The following code:

<?php
date_default_timezone_set("America/Chicago");

$startDate = new DateTimeImmutable( "2024-11-01" );
var_dump( $startDate );
$endDate = $startDate->modify( '+72 hour' );
var_dump($endDate);
$otherEndDate = $startDate->add( new DateInterval( 'PT72H' ) );
var_dump( $otherEndDate );

Resulted in this output:

object(DateTimeImmutable)#1 (3) {
  ["date"]=>
  string(26) "2024-11-01 00:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(15) "America/Chicago"
}
object(DateTimeImmutable)#2 (3) {
  ["date"]=>
  string(26) "2024-11-04 00:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(15) "America/Chicago"
}
object(DateTimeImmutable)#4 (3) {
  ["date"]=>
  string(26) "2024-11-03 23:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(15) "America/Chicago"
}

But I expected this output instead:

object(DateTimeImmutable)#1 (3) {
  ["date"]=>
  string(26) "2024-11-01 00:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(15) "America/Chicago"
}
object(DateTimeImmutable)#4 (3) {
  ["date"]=>
  string(26) "2024-11-03 23:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(15) "America/Chicago"
}
object(DateTimeImmutable)#4 (3) {
  ["date"]=>
  string(26) "2024-11-03 23:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(15) "America/Chicago"
}

Note that the from 11-1 to 11-4, Daylight Saving time ends. If you change the time by adding a DateInterval, it gets it right, but it gets it wrong with modify. Also note that if instead of adding 72 hours, you add 3 days, the inconsistency goes away--DateInterval understands, apparently, that one of those days is 25 hours, and adjusts correctly (at least, it seems correct to me) to Midnight on 11-4.

PHP Version

PHP 8.3

Operating System

No response

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.