Метод формата DateTime в PHP добавляет секунду в PHP - PullRequest
2 голосов
/ 10 октября 2019

У меня есть немного кода, который изменит строку DateTime на объекты DateTime

case 'datetime':
   if(!$value instanceof \DateTime){
   $variable = new \DateTime($value, new \DateTimeZone('US/Central'));
   if(!$variable){
      $errorarray = \Datetime::getLastErrors();
      throw new ErrorException('DateTime Error: '. explode(' ', $errorarray['errors']));
   }
break; 

Когда я вставлю строку типа '1999-01-01T00: 00', я получу объект типа

class DateTime#439 (3) {
  public $date =>
  string(26) "1999-01-01 00:00:00.000000"
  public $timezone_type =>
  int(3)
  public $timezone =>
  string(10) "US/Central"
}

Итак, я писал тестовый код на phpUnit и заметил ошибку, вот код, который я использовал, и полученные результаты:

$this->assertEquals('1999-01-01T00:00', $datetime->format('Y-m-d\TH:m'));
1) tests\genericObjectTest::testStrictType
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'1999-01-01T00:00'
+'1999-01-01T00:01'

Почему формат datetime->добавить секунду ко времени? При сбросе класса я вижу, что у меня нет дополнительной секунды. Я везде просматривал интернет и не могу найти проблему. Если я изменю свой код на

$datetime = new \DateTime('1999-01-01T00:00', new \DateTimeZone('US/Central'));
$this->assertEquals($datetime, $this->GenericObject->getField('datetime'));

, я получу прохождение теста. Это ошибка или непреднамеренная функция? Я использую PHP 7.3.9

1 Ответ

0 голосов
/ 10 октября 2019

При форматировании даты в тесте у вас есть ...

$datetime->format('Y-m-d\TH:m')

, так как m - месяц, поэтому вы получаете 1 в качестве последней части, которую вы должны использоватьi за минуты ...

$datetime->format('Y-m-d\TH:i')
...