PHP получает месяц и год от значения, такого как 43556 - PullRequest
0 голосов
/ 14 октября 2019

У меня есть поле в базе данных с именем «GROWTH_SALES_MONTHSTART», которое имеет значение 43556. Как правильно получить месяц и год из этого в PHP?

strtotime( "43556") дает bool(false).

РЕДАКТИРОВАТЬ: я попробовал следующее, но дата не подходит.

$tt = date( 'M-y', 43556 ) ;
var_dump( $tt );

Фактическая дата, которую я должен получить, - 19 апреля, в то время как я получаю январь-70. Я что-то упустил?

Я извлекаю значение (43556) из CSV.

1 Ответ

2 голосов
/ 14 октября 2019

Встроенный в PHP метод strtotime(...) ожидает допустимый формат времени и обрабатывает ваш ввод как секунд , и относительно значения, которое вы пытаетесь преобразовать во время, мы можем сказать, что:

  • Ваш номер 43556 seconds равен 725.9 часам (разделенным на 60)
  • 725.9 часам, равным 30.2 дням.
  • 30 дням равны один итолько один месяц.
  • Первый месяц года - January.
  • Первый год часов PHP - 1970.

И этоВыясните, почему вы застряли с Jan-70.


В любом случае, если ваше время основано на Excel, вы можете использовать приведенную ниже формулу для изменения с Дата Excel на Дата Unix , затем вы можете использовать "gmdate(...)" для получения реальной даты (например, другой ответ ):

$EXCEL_DATE = 43556; // Your CSV value goes here
$UNIX_DATE = ($EXCEL_DATE - 25569) * 86400;
echo gmdate("d-M-Y H:i:s", $UNIX_DATE);

Вывод:

01-Apr-2019 00:00:00

Но, если ваше время НЕ Excel, вы должны:

  • Узнать, на каком году и дате основаны ваши времена CSV.
  • Преобразовать это всекунд (где 1970 должен быть равен нулю), чтобы получить $baseTime.
  • Наконец, просто добавьте $baseTime к вашим значениям времени CSV.

Например:

$baseTime = strtotime( 'Tue Dec 15 2009' );
$tt = date( "d-m-Y H:i:s", strtotime( $baseTime + 43556 ) );
var_dump( $tt );
...