Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

161
Views
¿El objeto DateTime no está vinculado por su marca de tiempo?

¿Un objeto DateTime no está sujeto a su marca de tiempo? ¿O getTimestamp() tiene algún tipo de efecto secundario cuando se usa en el cambio de horario de verano?

Detalles
Al configurar la marca de tiempo de un objeto DateTime que está en DST de verano (lo que significa que la hora formateada existe tanto antes como después de cambiar el reloj), la marca de tiempo devuelta difiere de la marca de tiempo establecida.

 $ php --version PHP 7.1.3 (cli) (built: Mar 17 2017 16:59:59) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

Reproducir
Considere el siguiente script php :

 date_default_timezone_set('Europe/Berlin'); $date = new DateTime(); $set_timestamp = 1319932800; $date->setTimestamp($set_timestamp); $get_timestamp = $date->getTimestamp(); fwrite(STDERR, $set_timestamp . "\n"); // 1319932800 fwrite(STDERR, $get_timestamp . "\n"); // 1319936400 **(WHY IS THIS DIFFERENT?)**

¿Por qué los valores impresos no son iguales?

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

El objeto \DateTime no mantiene las marcas de tiempo sino la hora local, y realiza conversiones en el captador de marcas de tiempo y el establecimiento de marcas de tiempo.

Da como resultado un efecto secundario una vez al año cuando se desactiva el horario de verano, ya que ambos rangos de marca de tiempo 1319932800..1319936400 y 1319936400..1319940000 se resuelven en la misma hora local:
https://www.epochconverter.com/timezones?q=1319936399&tz=Europe%2FBerlin https://www.epochconverter.com/timezones?q=1319939999&tz=Europe%2FBerlin

about 4 years ago · Santiago Trujillo Report

0

En primer lugar, la marca de tiempo de Unix siempre está en UTC, por lo que no tiene zona horaria ni horario de verano.

Por otro lado, el objeto DateTime almacena solo la hora local (el "local" significa qué zona horaria está configurada en la instancia de DateTime ) .

Por lo tanto, debe establecer la zona horaria en +00:00 o UTC antes de establecer una marca de tiempo para evitar conversiones de hora innecesarias y adivinar el horario de verano.

Tienes dos opciones:

1. Establezca la marca de tiempo a través del constructor de DateTime

El constructor anulará la zona horaria predeterminada y se establecerá explícitamente en +00:00 cuando obtenga la marca de tiempo (comenzó con @ ) en el primer parámetro:

 $set_timestamp = 1319932800; $date = new DateTime('@' . $set_timestamp); print($set_timestamp . "\n"); print($date->getTimestamp() . "\n");

Información: en este caso, el parámetro de zona horaria del constructor siempre se anulará.

2. Establezca la zona horaria antes de llamar a setTimestamp()

Llame setTimezone() con la zona horaria DateTimeZone('+00:00') o DateTimeZone('UTC') antes de llamar a setTimestamp() :

 $set_timestamp = 1319932800; $date = new DateTime(); $date->setTimezone(new DateTimeZone('UTC')); $date->setTimestamp($set_timestamp); print($set_timestamp . "\n"); print($date->getTimestamp() . "\n");

notas

Por supuesto, en ambos casos la salida será:

 1319932800 1319932800

El date_default_timezone_set() es innecesario en estos casos, porque no desea hacer nada con la hora local.

Sin embargo, cuando desee imprimir la $date en un formato legible por humanos (por lo tanto, cuando convierta la marca de tiempo de Unix a la hora local) , la zona horaria volverá a ser interesante.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!