PHP: DateTime '-1 день' -- php поле с участием datetime пол Связанный проблема

PHP: DateTime '-1 day'


1
vote

проблема

русский

Я хочу получить дату вчерашнего дня текущей даты в часовом поясе SpeciFC. Я пробовал это, но это не работает:

 <код> LoopGenrtReport2  

Я все еще получаю сегодняшнюю дату.

Английский оригинал

I want to get the date of yesterday of the current date in a specifc time zone. I tried like this, but it is not working:

$date = new DateTime(NULL, new DateTimeZone('Pacific/Wake'));  $yesterday = $date->modify( '-1 day' ); $yesterday = $yesterday->format('Y-m-d'); 

I am still getting today's date.

</div
     
     
     

Список ответов

7
 
vote
vote
Лучший ответ
 

Эта проблема, согласно Документация для <код> modify() метода , кажется, полностью зависит от того, какая версия PHP вы используете. В этом случае цепочка метода (который является то, что вы пытаетесь сделать, называется), доступно только на PHP версии 5.3.0 и UP, согласно данным ChangeLog на ранее связанных документах.

Это в виду, он объясняет, почему ваш код не работал, а @ Deryck's сделал. Если вы когда-нибудь обновите свою версию PHP, или получите хост, чтобы обновить его, вы, вероятно, сможете уменьшить эти три строки до двух:

 <код> $date = new DateTime(NULL, new DateTimeZone('Pacific/Wake'));  $date = $date->modify( '-1 day' )->format('Y-m-d');   

Не большая часть улучшения, я понимаю, но есть ваша причина, почему она не удалось работать.

Ниже приведены два метода, которые я вижу о том, чтобы обойти это; Одним из которых является создание класса .. который, похоже на излишки для меня, если это не какое-то что-то грандиозное ... Другое - это создание функции. Оба оборудят дополнительные линии в то, что занимает меньше места, в некотором смысле.

 <код> class DT {     private $now; //can be null     private $timezone; //DateTimeZone object     public function __construct($tz_str, $now = NULL) {         $this->now = $now;         $this->timezone = new DateTimeZone($tz_str);;     }      public function mod($mod,$format) {       $dt = new DateTime($this->now, $this->timezone);       $dt->modify($mod);       return $dt->format($format);     } }  function mod_formatted_zone($tz_str, $mod, $format, $now = NULL) {     $timezone = new DateTimeZone($tz_str);     $dt = new DateTime($now,$timezone);     $dt->modify($mod);     return $dt->format($format); }   

Использование либо просто; В случае класса было бы что-то вроде ..

 <код> $dt = new DT('Pacific/Wake'); echo $dt->mod('-1 day', 'Y-m-d');   

В случае в случае функции, это просто было ..

 <код> echo mod_formatted_zone('Pacific/Wake', '-1 day', 'Y-m-d');   
 

This problem, according to the documentation for the modify() method, seems to entirely depend on which version of php you're using. In this case, method chaining(which is what you're attempting to do is called), is only available on php version 5.3.0 and up, according to the changelog on the previously linked docs.

That in mind, it explains why your code didn't work, and @Deryck's did. If you ever do upgrade your php version, or get your host to upgrade it, you could likely reduce those three lines to two:

$date = new DateTime(NULL, new DateTimeZone('Pacific/Wake'));  $date = $date->modify( '-1 day' )->format('Y-m-d'); 

Not much of an improvement, I realize, but there's your reason for why it failed to work.

Below are two of the methods I see of getting around this; one is creation of a class.. which seems like overkill to me unless this is apart of something grander... the other is a creation of a function. Both shove the extra lines into something that takes up less space, in a sense.

class DT {     private $now; //can be null     private $timezone; //DateTimeZone object     public function __construct($tz_str, $now = NULL) {         $this->now = $now;         $this->timezone = new DateTimeZone($tz_str);;     }      public function mod($mod,$format) {       $dt = new DateTime($this->now, $this->timezone);       $dt->modify($mod);       return $dt->format($format);     } }  function mod_formatted_zone($tz_str, $mod, $format, $now = NULL) {     $timezone = new DateTimeZone($tz_str);     $dt = new DateTime($now,$timezone);     $dt->modify($mod);     return $dt->format($format); } 

The use of either is simple; in the case of the class, it'd be something like..

$dt = new DT('Pacific/Wake'); echo $dt->mod('-1 day', 'Y-m-d'); 

While in the case of the function, it'd simply be..

echo mod_formatted_zone('Pacific/Wake', '-1 day', 'Y-m-d'); 
</div
 
 
       
       
3
 
vote

Кажется, работает после того, как вы не повторно назначаете $date без необходимости. См. Ниже:

 <код> <?php    $date = new DateTime(NULL, new DateTimeZone('Pacific/Wake'));   $date->modify("-1 day");   $date = $date->format("Y-m-d");   // echo $date; // just in case you wanna echo - ya dig ?>   

Просмотр демонстрации

FYI:

часовой пояс острова Уэйкс (UTC + 12: 00)

что означает 1 день до фактически сегодня (для меня, по крайней мере, на западном полушарии).

 

Seems to work once you don't re-assign the $date variable unnecessarily. See below:

<?php    $date = new DateTime(NULL, new DateTimeZone('Pacific/Wake'));   $date->modify("-1 day");   $date = $date->format("Y-m-d");   // echo $date; // just in case you wanna echo - ya dig ?> 

View demo

FYI:

Wake Island Time Zone (UTC+12:00)

Which means 1 day before is actually today (for me at least, on the western hemisphere).

</div
 
 
         
         
0
 
vote

Я хочу получить дату вчерашнего дня текущей даты в часовом поясе SPECEIFC.

Вы можете указать относительные даты в конструкторе DateTime. Это будет работать для вас: -

 <код> $yesterday = new DateTime('- 1 day', new DateTimeZone('Pacific/Wake')); var_dump($yesterday);   

Доказательство! .

 

I want to get the date of yesterday of the current date in a specifc time zone.

You can specify relative dates in the DateTime constructor. This will work for you:-

$yesterday = new DateTime('- 1 day', new DateTimeZone('Pacific/Wake')); var_dump($yesterday); 

Proof!.

</div
 
 

Связанный проблема

2  Отправка файла в Google Drive  ( Submitting file to google drive ) 
Я пытался отправить файл в Google Drive. Хотя файл загружен на диск, я получаю ошибку после удара принять кнопку. <код> <?php require_once 'google-api-php-c...

2  Laravel 5.2 Hasthrough  ( Laravel 5 2 hasthrough ) 
Так что я пытаюсь получить доступ к пользователям заметки по их аккаунтам. В основном Notes не принадлежат пользователю, они принадлежат к учетной записи, в к...

1  Уменьшите часы экземпляра CloudsQL (WordPress)  ( Reduce cloudsql instance hours wordpress ) 
У меня есть установка WordPress на GAE. Это веб-сайт, который будет очень редко обновлен, и будет иметь мало посетителей каждый день (100 ish max). Я хотел бы...

0  Google Map не отображает  ( Google map not displaying ) 
У меня есть карта Google, которая используется здесь: http://www.comehike.com/outdoors/birds/birds.php Теперь я вижу сообщения об ошибках .j для 1) Инициа...

0  Mac Yosmite: Установите MacPorts Apache в качестве по умолчанию (Opt / local / apache2) на localhost, а не распределение OSX  ( Mac yosmite set macports apache as default opt local apache2 on localhost rat ) 
Я установил Apache через MACPPORTS, он работал нормально, но вдруг по какой-то причине он переключился на использование распределения OSX по умолчанию Apache,...

1  Форма подписки Rapidmail перенаправляет после подписки электронной почты - MailChimp  ( Rapidmail subscription form redirect after email subscription mailchimp ) 
Я создаю веб-страницу, которая включает в себя очень простую форму подписки, в основном собирая адреса электронной почты, заинтересованные в продукте. Для это...

0  Добавление поля в запросе MySQL  ( Adding a field in a mysql query ) 
Мне нужно добавить поле в одном из наших запросов. Я NT PHP-программист купил, я немного ударил. Запрос: <код> if (_QUERYSTRING_) { switch ($intMode) { ...

-2  PHP отображается только идентификатор, а не значение из MySQL [Закрыто]  ( Php only displaying id and not the value from mysql ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос нуждается в Детали или ясность . В настоящее...

-1  PHP Удалить окружающие пустые массивы из массива меню  ( Php remove surrounding empty arrays from menu array ) 
Привет, я пытаюсь построить лучшее динамическое меню, чем тот, который у меня в настоящее время использует массивы У меня нет проблем с удалением окружающих...

0  Создание копии Symfony Project на сервере?  ( Making a copy of symfony project on server ) 
Я пытаюсь скопировать существующий проект Symfony в другой каталог, поэтому я могу проверить изменения, прежде чем применять их в живую версию. Я получаю ош...

0  Как я могу получить ответ JSON обратно (PHP)  ( How can i get json response back php ) 
Я сталкиваюсь с проблемой с ответом сервера. Моя цель состоит в том, чтобы отправить некоторые данные на сервер и получить некоторые ответы с учетом отправлен...

8  MySQL Заказ с использованием строки даты данных  ( Mysql order by using date data row ) 
У меня есть запрос что-то подобное: <код> public class AlarmReciever extends BroadcastReceiver { AlarmClock alarmClock=new AlarmClock(); @Override public v...

0  Невозможно получить любые поля объявлений из API API Facebook (PHP v2.8.1)  ( Unable to fetch any adset fields from facebook ads api php v2 8 1 ) 
Я получаю поля Adaccount просто хорошо. Но все мои попытки получить адапты неудачей. Я пытаюсь получить идеи всех кампаний, бегущих под Adaccount. Но во-первы...

0  Оптимизировать этот запрос на 1000000+ строк  ( Optimize this query for 1000000 rows ) 
Мне нужно потянуть данные и записывать его в файл CSV, но слишком много времени и слишком много времени. Что не так с этим и что я могу сделать? Кроме того, я...

1  Иерархическая система комментариев в резьбовом режиме: php и mysql  ( Hierarchical commenting system in threaded view php and mysql ) 
У меня есть необходимость оказать резьбовое изображение 2-уровневых иерархических комментариев системы. Комментарии хранятся в базе данных. Информация о иерар...