Найти файл в каталоге на основе даты / ГОД / МЕСЯЦ / ДЕНЬ — но не на основе текущей даты — статическая метка даты

У меня есть переменная, извлеченная из базы данных 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*

Который я тогда передам назад к оригинальному сценарию, чтобы он загрузил файл.

0

Решение

Вы можете использовать функцию 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 заменяется на часовой пояс и так далее.

2

Другие решения

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;
1

Это мой последний фрагмент кода!

<?php

$dateString = '2017-02-22 16:24:12';
$base = "/monitor/";

$path = "$base".date('Y/m/d/',strtotime("$dateString"));

echo $path;

?>
0
По вопросам рекламы [email protected]