PHP - 根据日期在目录中查找文件 /YEAR/MONTH/DAY - 但不基于当前日期 - 静态日期戳

PHP - Find file in Directory based on date /YEAR/MONTH/DAY - But not based on current date - static Datestamp

我从 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 尝试使用任何类型的 date/time 函数来执行此操作。但也许我 can/should 使用了日期功能。

我知道日期时间总是这样格式化的,但感觉 "hackish" 用第一种方式来做。我可以在一秒钟内完成 bash,但我不太擅长 PHP。

感谢您的帮助!

PS:为了提供上下文,我将获得传递给此 php 脚本的 2 个变量,phone 数字和日期。然后我将根据该信息查询 CDR table 以获取此通话记录的唯一 ID,然后我知道该文件将位于:

/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因为时间的原因被替换为pms被替换为秒值, 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;

?>