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

时间:2017-02-25 00:48:48

标签: php date datetime directory subdirectory

我从一个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尝试使用任何类型的日期/时间函数执行此操作。但也许我可以/应该使用日期功能。

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

感谢您的帮助!

PS:为了给出上下文,我将获得2个变量传递给这个php脚本,电话号码和日期。然后,我将根据该信息在CDR表中查询此呼叫记录的唯一ID,然后我知道该文件将在:

/monitor/2017/02/22/*uniqueID*

然后我会将其传回原始脚本以下载文件。

3 个答案:

答案 0 :(得分:2)

您可以使用函数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保持不变,因为它没有任何意义,但随后apm替换,因为时间s被秒值替换e ProguardConfiguration 1}}被替换为时区等等。

答案 1 :(得分:1)

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;

答案 2 :(得分:0)

这是我的最终代码snippit!

<?php

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

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

echo $path;

?>