PHP如何将年度3212(YDDD)的逆向工程改造为2013-08-01(YYYY-mm-dd)

zzl*_*ani 7 php date

我有一个日期YDDD格式如3212
我想将此日期转换为默认日期字符串即2013-08-01在PHP中
因为第一个值Y是Year的唯一字符,所以我决定从前三个字符当前年份即2013年
的201 以下是我今年编写的代码

<?php
$date = "3212"
$y = substr($date,0,1); // will take out 3 out of year 3212
$ddd = substr($date,1,3); // will take out 212 out of year 3212
$year = substr(date("Y"),0,3) . $y; //well create year "2013"
?>
Run Code Online (Sandbox Code Playgroud)

现在我该如何使用$year,并212把它转换成2013年8月1日使用PHP

编辑
FYI:我的PHP版本是5.3.6

sal*_*the 13

$date = "3212";
echo DateTime::createFromFormat("Yz", "201$date")->format("Y-m-d");
// 2013-08-01
Run Code Online (Sandbox Code Playgroud)

  • 这个版本的答案更好. (4认同)
  • +1有点原油,但仍然清晰,没有正则表达式! (2认同)

dec*_*eze 8

$yddd = 3212;
preg_match('/^(\d)(\d{3})$/', $yddd, $m);

echo date('Y-m-d', strtotime("201{$m[1]}-01-01 00:00:00 +{$m[2]} days"));
Run Code Online (Sandbox Code Playgroud)

  • 为什么我们必须regex all teh thingz? (3认同)

小智 6

如果您在PHP 5.3或更高版本上运行代码,则可以使用date_create_from_format将$ year和$ ddd转换为可用日期.例如:

$date = date_create_from_format("Y-z", "$year-$ddd");
echo date_format($date, "Y-m-d");
Run Code Online (Sandbox Code Playgroud)