DateTime::setTimestamp
date_timestamp_set
(PHP 5 >= 5.3.0)
DateTime::setTimestamp -- date_timestamp_set — Устанавливает дату и время, основываясь на метке времени Unix
Описание
Объектно-ориентированный стиль
Процедурный стиль
Устанавливает дату и время, основываясь на метке времени Unix.
Список параметров
-
object
-
Только для процедурного стиля: Объект DateTime, возвращаемый date_create(). Функция изменяет этот объект.
-
unixtimestamp
-
Метка времени Unix представляющая дату.
Возвращаемые значения
Возвращает объект DateTime для применения в цепи методов или FALSE
в случае возникновения ошибки.
Примеры
Пример #1 Пример использования DateTime::setTimestamp()
Объектно-ориентированный стиль
<?php
$date = new DateTime();
echo $date->format('U = Y-m-d H:i:s') . "\n";
$date->setTimestamp(1171502725);
echo $date->format('U = Y-m-d H:i:s') . "\n";
?>
Процедурный стиль
<?php
$date = date_create();
echo date_format($date, 'U = Y-m-d H:i:s') . "\n";
date_timestamp_set($date, 1171502725);
echo date_format($date, 'U = Y-m-d H:i:s') . "\n";
?>
Результатом выполнения данных примеров будет что-то подобное:
1272508903 = 2010-04-28 22:41:43 1171502725 = 2007-02-14 20:25:25
Примечания
Использование меток времени Unix для создания экземпляров DateTime является альтернативным при работе с PHP 5.2. См. пример ниже.
Пример #2 Использование DateTime::setTimestamp() в качестве альтернативы в PHP 5.2
<?php
$ts = 1171502725;
$date = new DateTime("@$ts");
echo $date->format('U = Y-m-d H:i:s') . "\n";
?>
Результатом выполнения данного примера будет что-то подобное:
1171502725 = 2007-02-14 20:25:25
Смотрите также
- DateTime::getTimestamp() - Возвращает временную метку Unix
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с датой и временем
- Дата и Время
- DateTime::add
- Функция DateTime::__construct() - Конструктор класса DateTime
- Функция DateTime::createFromFormat() - Создает и возвращает экземпляр класса DateTime, соответствующий заданному формату
- Функция DateTime::getLastErrors() - Возвращает предупреждения и ошибки
- Функция DateTime::modify() - Изменение временной метки
- Функция DateTime::__set_state() - Обработчик __set_state
- Функция DateTime::setDate() - Установка даты
- Функция DateTime::setISODate() - Установка ISO даты
- Функция DateTime::setTime() - Установка времени
- Функция DateTime::setTimestamp() - Устанавливает дату и время, основываясь на метке времени Unix
- Функция DateTime::setTimezone() - Установка временной зоны для объекта класса DateTime
- DateTime::sub
Коментарии
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
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' );
?>
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>';
?>
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
*/
?>