DateTime::setTimestamp

date_timestamp_set

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

DateTime::setTimestamp -- date_timestamp_setEstablece la fecha y la hora basándose en una marca temporal de Unix

Descripción

Estilo orientado a objetos

public DateTime::setTimestamp(int $unixtimestamp): DateTime

Estilo por procedimientos

date_timestamp_set(DateTime $object, int $unixtimestamp): DateTime

Establece la fecha y la hora basándose en una marca temporal de Unix.

Parámetros

object

Solamente para el estilo por procedimientos: Un objeto DateTime devuelto por date_create(). La función modifica este objeto.

unixtimestamp

La marca temporal de Unix que representa la fecha.

Valores devueltos

Devuelve el objeto DateTime para la cadena de métodos o false en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de DateTime::setTimestamp()

Estilo orientado a objetos

<?php
$fecha
= new DateTime();
echo
$fecha->format('U = Y-m-d H:i:s') . "\n";

$fecha->setTimestamp(1171502725);
echo
$fecha->format('U = Y-m-d H:i:s') . "\n";
?>

Estilo por procedimientos

<?php
$fecha
= date_create();
echo
date_format($fecha, 'U = Y-m-d H:i:s') . "\n";

date_timestamp_set($fecha, 1171502725);
echo
date_format($fecha, 'U = Y-m-d H:i:s') . "\n";
?>

El resultado de los ejemplos sería algo similar a:

1272508903 = 2010-04-28 22:41:43
1171502725 = 2007-02-14 20:25:25

Notas

Utilizar el formato de marca temporal de Unix para construir un nuevo objeto DateTime es una alternativa al emplear PHP 5.2, como se muestra en el ejemplo de abajo.

Ejemplo #2 Alternativa de DateTime::setTimestamp() en PHP 5.2

<?php
$ts
= 1171502725;
$fecha = new DateTime("@$ts");
echo
$date->format('U = Y-m-d H:i:s') . "\n";
?>

El resultado del ejemplo sería algo similar a:

1171502725 = 2007-02-14 20:25:25

Ver también

add a note add a note

User Contributed Notes 4 notes

up
18
admin at torntech dot com
8 years ago
It should be noted above, be careful when manipulating the DateTime object with unix timestamps.
In the above examples you will get varying results dependent on your current timezone, method used, and version of PHP.

One would expect all of the examples above to perform the same as setTimestamp() or date('H:i', $timestamp); would.

<?php
date_default_timezone_set
('America/New_York');

$ts = 1171502725;
?>

Set timestamp from UTC timezone use UTC timezone
<?php
$date
= new DateTime("@$ts");
var_dump($date->format('Y-m-d H:i:s e'));
/*
string(26) "2007-02-15 01:25:25 +00:00" //PHP 5.3.0 - 5.6.8
*/
?>

To convert the above to use the current timezone simply use
<?php
$date
->setTimezone(date_default_timezone_get());
//string(36) "2007-02-14 20:25:25 America/New_York"
?>

Set the timestamp from UTC timezone use current timezone
<?php
$date
= new DateTime;
$date->modify('@' . $ts);
var_dump($date->format('Y-m-d H:i:s e'));
/*
string(36) "2007-02-15 01:25:25 America/New_York" //PHP 5.3.6 - 5.6.8
string(36) "2052-06-20 18:53:24 America/New_York" //PHP 5.3.0 - 5.3.5
*/
?>

Set the timestamp from current timezone use current timezone
<?php
$date
= new DateTime;
$date->setTimestamp($ts);
var_dump($date->format('Y-m-d H:i:s e'));
/*
string(36) "2007-02-14 20:25:25 America/New_York" //PHP 5.3.0 - 5.6.8
*/
?>
up
-2
Arnb
10 years ago
When you need to manipulate a unix timestamp like field (seconds since 1970-01-01) that may be greater than the drop dead date of 2038-01-19.

<?php

function secs2date($secs,$date)
    {
    if (
$secs>2147472000)    //2038-01-19 expire dt
       
{
       
$date->setTimestamp(2147472000);
       
$s=$secs-2147472000;
       
$date->add(new DateInterval('PT'.$s.'S'));
        }
    else
       
$date->setTimestamp($secs);
    }

function
date2secs($date,$datebeg)
    {
   
$diff = $datebeg->diff($date);
   
$secs=$diff->format('%a') * (60*60*24);  //total days
   
$secs+=$diff->format('%h') * (60*60);     //hours
   
$secs+=$diff->format('%i') * 60;              //minutes
   
$secs+=$diff->format('%s');                     //seconds
   
return $secs;
    }

$datebeg = new DateTime('1970-01-01');
$date=new dateTime();

$secs=2017472000//2033-12-06 08:53:20
secs2date($secs,$date);
$dt=$date->format('Y-m-d H:i:s');
echo
$dt."<br>";
$sec2=date2secs($date,$datebeg);
echo
'(1) ',$sec2,'***',$secs,'<br>';

$secs=2397472000; //2045-12-21 12:26:40
secs2date($secs,$date);
$dt=$date->format('Y-m-d H:i:s');
echo
$dt."<br>";
$sec2=date2secs($date,$datebeg);
echo
'(2) ',$sec2,'***',$secs,'<br>';
?>
up
-2
Use Web Form at Aouie.net
13 years ago
When the exact time is important then it is important to note the difference between this and the UnixTimeStamp. The function will change the timestamp if necessary to take into account the daylight savings time.
e.g. Working with the 'Europe/London' timezone and setting the DateTime object to a timestamp of 1288486753 will result in the function automatically altering it to 1288490353.
This is because it is taking the fall time instead of the summer time (they will both be Sun, 31-Oct-2010 01:X:Y (I didn't check the hour and minute)).
Sincerely,
Aouie
up
-15
linblow at hotmail dot fr
12 years ago
If your PHP version is lower than 5.3 then you can use this class to be able to use the functions "setTimestamp" and "getTimestamp":

<?php

class MyDateTime extends DateTime
{
    public function
setTimestamp( $timestamp )
    {
       
$date = getdate( ( int ) $timestamp );
       
$this->setDate( $date['year'] , $date['mon'] , $date['mday'] );
       
$this->setTime( $date['hours'] , $date['minutes'] , $date['seconds'] );
    }
   
    public function
getTimestamp()
    {
        return
$this->format( 'U' );
    }
}

$date = new MyDateTime();
$date->setTimestamp( $someTimestamp );

echo
$date->format( 'd/m/Y H:i:s' );

?>
To Top