2012-02-08 90 views

回答

3

当然,使用mktimedate

$days = 322; 
$year = 2009; 
echo date('Y-m-d', mktime(0, 0, 0, 1, $days, $year)); 

Output: 2009-11-18

+0

你确定月份的1吗? – FMaz008 2012-02-08 20:59:57

+0

@ FMaz008 - 是的,[见输出](http://codepad.viper-7.com/JSVWem)。 – nickb 2012-02-08 21:00:29

1
$newformat = new DateTime::createFromFormat('Y z', "2009 322")->format('Y-M-d'); 

相关的文档在这里:http://php.net/manual/en/datetime.createfromformat.php

+0

这很酷。 – FMaz008 2012-02-08 20:52:58

+4

DateTime :: createFromFormat是一种静态方法,不能使用'new'。另外,你的格式字符串应该是“Y-m-d'”。并且,它会生成[关闭一天](http://codepad.viper-7.com/6HMOvb)的日期。 – nickb 2012-02-08 20:55:14

0

难的方法(和作为奖金,我分析你给输入例如:P):我们确实有在PHP strtotime(),它可以很容易地从一年拉时间戳

list($day, $foo, $year, $bar) = sscanf("322 days 2009 year", "%d %s %d %s"); 
$timestamp = mktime (0,0,0, 1, $day, $year); 
echo date('Y-m-d', $timestamp); 
+0

这会产生[一个月关闭]的日期(http://codepad.viper-7.com/AV9ukf)。 – nickb 2012-02-08 21:01:41

+1

@nickb固定,感谢指出:) – FMaz008 2012-02-08 21:02:41

0

echo $time = strtotime('1.1.2009'); 
// 1230764400 

而且随着加入天IT连锁:

echo $newTime = strtotime('+322 days', $time); 
// 1258585200 
echo date('r', $newTime); 
// Thu, 19 Nov 2009 00:00:00 +0100 
echo date('Y-m-d', $newTime); 
// 2009-11-19 
// output will be 19 instead of 18 (due to how strtotime handles + days), you 
// should use +321 days instead than 

顺便说一句:我喜欢马克B的答案BETT呃)

+0

'2009-11-19'是一天休息,期望的输出是'2009-11-18' - 这是故意的吗? – nickb 2012-02-08 20:57:57

+1

@nickb我没有意识到这一点。谢谢,补充说明发表评论。 – Vyktor 2012-02-08 21:00:55

+0

感谢家伙.........这个网站岩石........... – 2012-02-09 14:51:03