У меня есть переменная, извлеченная из базы данных SQL, которая находится в формате «datetime»:
2017-02-22 16:24:12
Мне нужно будет найти файл в этом каталоге на основе результатов оставшегося кода, но я не уверен, как отформатировать переменные даты для каталога.
Например:
/basefolder/2017/02/22/File.extension
Я много читал об использовании переменных даты, но все они основаны на текущей дате. Я думал, что могу просто раздеть цифры
/basefolder/"first 4 numbers"/"second 2 numbers"/"last 2 numbers"/
VS пытается сделать это с помощью любых функций даты / времени. Но возможно есть функция даты, которую я могу / должен использовать.
Я знаю, что дата и время всегда будут отформатированы как таковые, но это кажется «хакерским», чтобы сделать это первым способом. Я мог бы сделать это в bash за секунду, но я не так хорош с PHP.
Спасибо за любую помощь!
PS: Чтобы дать контекст, я получу 2 переменные, передаваемые в этот скрипт php, номер телефона и дату. Затем я буду запрашивать в таблице CDR уникальный идентификатор этой записи о вызове на основе этой информации, а затем я знаю, что файл будет в:
/monitor/2017/02/22/*uniqueID*
Который я тогда передам назад к оригинальному сценарию, чтобы он загрузил файл.
Вы можете использовать функцию strtotime
чтобы преобразовать строку даты в метку времени, а затем использовать date
функция для создания даты в формате, который вам нравится, и вы можете передать метку времени в качестве второго аргумента (она использует текущее время, только если вы передаете только формат)
документы для strtotime
: http://php.net/manual/en/function.strtotime.php
<?php
$dateString = '2017-02-22 16:24:12';
$timestamp = strtotime($dateString);
$datepath = date('Y/m/d',$timestamp);
$path = "/basefolder/$datepath/";
var_dump($path);
Это выводит: string(20) "/basefolder/2017/02/22/"
Этот код может быть сокращен до:
$path = "/basefolder/".date('Y/m/d/',strtotime('2017-02-22 16:24:12'));
Похоже, вы уже нашли функцию даты, но здесь есть дополнительная информация: http://php.net/manual/en/function.date.php
Обратите внимание, что вы должны сделать это в два этапа, как если бы вы включили /basefolder/
часть в формате, переданном на сегодняшний день, тогда он заменит отдельные символы различными форматами даты — например:
$datepath = date('/basefolder/Y/m/d',$timestamp);
наборы $datepath
что-то вроде bpm12US/Pacificf2017Wednesday22US/PacificWed, 22 Feb 2017 16:24:12 -0800/2017/02/22
b
остается один, потому что это ничего не значит, но потом a
заменяется на pm
из-за времени, s
заменяется значением секунд, e
заменяется на часовой пояс и так далее.
date_parse_from_format () преобразует из строки в разбитый массив времени:
<?php
$d = date_parse_from_format("Y-m-d H:i:s", "2017-02-22 16:24:12");
$ds = sprintf("/base/%d/%02d/%d", $d['year'], $d['month'], $d['day']);
echo $ds;
Это мой последний фрагмент кода!
<?php
$dateString = '2017-02-22 16:24:12';
$base = "/monitor/";
$path = "$base".date('Y/m/d/',strtotime("$dateString"));
echo $path;
?>