我从一个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*
然后我会将其传回原始脚本以下载文件。
答案 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
保持不变,因为它没有任何意义,但随后a
被pm
替换,因为时间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;
?>