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
因为时间的原因被替换为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;
?>
我从 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
因为时间的原因被替换为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;
?>