2013-04-09 112 views
-1

我有一个三个参数,我希望得到确切的日期。我有以下参数:PHP日期时间:获取日期基于月,周和一周的日期

Month : integer (01-12) | 
Week of month : integer (01-05) | 
Day of week : (Sunday-Saturday) 

我有三个以上的参数,我想获取日期。

例如:

假设我有01 as month 01为周周的一天,周五则它应该返回03-01-2014

假设:任何投入将是未来唯一的日期。

+0

你能解释的第一个月01和第01周,周五是如何等于2014年3月1日,该位是非常混乱 – Dale 2013-04-09 12:40:24

+3

在这个基础上,你将如何从这些参数中获取YEAR? – swapnesh 2013-04-09 12:40:30

+0

直到我记住标准的美国日期符号与世界其他地方不同时,我对你的结果感到非常困惑。您应该澄清(对于美国回答者)您的日期标记为DD-MM-YYYY(而不是MM-DD-YYYY)。 – thelr 2013-04-09 12:45:59

回答

2

使用strtotime。需要写出星期几和星期几(2013年1月1日星期五),所以我将月份数字转换为名称。我假设星期几已经是“星期五”。

function calcDate($day,$week,$month) 
{ 
    $thisYear = date("Y"); 

    $monthName = date("F", mktime(0, 0, 0, $month, 10)); //http://gilbert.pellegrom.me/php-month-number-to-month-name-the-easy-way/ 
    $query = $week." ".$day." ".$monthName; 
    $outDate = strtotime($query." ".$thisYear)); 

    if (outDate < time()) 
    { 
    $outDate = strtotime($query." ".($thisYear+1)); 
    } 
    return date('d-m-Y', $outDate); 
} 
2

我敢肯定,这可以进一步扩展:

$month = 'January'; 
$week = 0; 
$day = 'friday'; 
$year = date("Y") + 1; 

$d = new DateTime(); 
$d->modify("first {$day} of {$month} {$year} +{$week} week"); 
echo $d->format('d/m/Y'); 
+0

+1这已经超越了我的想法 - 我不知道是谁贡献了PHP日期/字符串解析算法,但他们是我眼中的传说,因为它实际上是神奇的! – Emissary 2013-04-09 13:18:21

+0

@Emissary,我只是通过它的手册页阅读,是的它真的是真棒:) ['相对时间格式](http://www.php.net/manual/en/datetime.formats.relative。 PHP) – Dale 2013-04-09 13:20:30

相关问题