2013-03-11 95 views
1

我正在尝试计算期间的数量(每个期间为1周,在某个日期或某天之后)。可以说,第一阶段开始于2013年1月1日(星期二)至2013年1月29日(星期二)(共4个阶段)。计算特定日期后的星期数量

我有一个表,看起来像:

id | startDate (datetime) | endDate (datetime) 

我有两个输入框,用户可以在一个start dateend date填写。我想填写01-01-201329-01-2013之间的任何日期,并决定它再次通过星期二(该期间开始的日期)的次数。

所以,如果我会选择01-01-2013 until 07-01-2013会导致:1,但如果我会选择06-01-2013 till 09-01-2013这将导致206-01-2013 till 16-01-2013会导致3

要清楚,我不想知道的金额这两个日期之间的星期数,只有它在数据库中给出的同一天(星期二)“交叉”的次数。每期为1周。有没有人可以帮助我?

+0

澄清,你想知道X日(星期二)在日期Y和Z之间有多少次? – mkaatman 2013-03-11 16:07:05

+0

是的!多数民众赞成什么即时通讯寻找,我不能让我的头靠近它 – Geo 2013-03-11 16:08:45

+0

搜索! http://stackoverflow.com/questions/1653891/how-to-find-number-of-mondays-or-tuesdays-between-two-dates – mkaatman 2013-03-11 16:11:04

回答

2

使用PHP的date()函数。

$startday = strtotime($start_date_from_db);//date from db; 
$endday = strtotime($end_date_from_db);//date from db; 
$counter = 0; 
for($i=$startday; $i<=$endday; $i+=86400) { 
    $current_day = date('w', $i); 
    if($current_day == 2) { //0 for sunday, 1 for monday, 2 for tuesday 
     $counter++; 
    } 
} 
+0

相当浪费,特别是如果它是一个“大”日期范围。有更简单的方法来获取日期范围长度。 – 2013-03-11 16:13:36

+0

@MarcB在OP的例子中,开始日期和结束日期之间的差异只有两个月。所以这不会是一个问题。 – ShuklaSannidhya 2013-03-11 16:20:00

1

当比较日期的好方法是:

1-变换日期时间戳:

$timestamp1 = strtotime($date1); 
$timestamp2 = strtotime($date2); 

2-做所需的操作,在这种情况下:

$timebetween = $timestamp2 - $timestamp1; 

3-在这种情况下将结果(秒数)转换为期望值:

$weeks= $timebetween/604800; 
相关问题