PHP函数在两个发布日期之间循环工作日

时间:2012-10-31 08:08:59

标签: php date loops

  

可能重复:
  Print Y-m-d list of business dates between two dates from MySQL using PHP

我是这些PHP编程的新手,所以请耐心等待。

我希望用户能够发布两个日期,一个开始日期和一个结束日期,并从这些日期计算营业日期(不包括星期六和星期日)并将这些日期插入MySQL

例如,如果我有这个表格......

<form action='update.php' method='post'>
  <input type='text' name='start_date'>
  <input type='text' name='end_date'>
  <input type='submit' name='submit'>
</form>

update.php

if(isset($_POST['submit'])) {

   $start_date = $_POST['start_date']; //Let's say this is 2012-10-01
   $send_date = $_POST['end_date']; //Let's say this is 2012-10-10

}

现在我想遍历日期并创建一个像这样运行的MySQL查询:

INSERT INTO tbl_dates (date_value) VALUES ('2012-10-01');
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-02');
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-03');
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-04');
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-05');
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-08');
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-09');
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-10');

我知道这可能不是一个好的解决方案,但它是我需要它的方式。

如何创建循环?

3 个答案:

答案 0 :(得分:1)

$startDate = $start_date;
$endDate = $send_date;

// Convert to UNIX timestamps
$currentTime = strtotime($startDate);
$endTime = strtotime($endDate);

// Loop until we reach the last day
$result = array();
while ($currentTime <= $endTime) {
  if (date('N', $currentTime) < 6) {
    $result[] = date('Y-m-d', $currentTime);
  }
  $currentTime = strtotime('+1 day', $currentTime);
}

// start insertion
foreach($result as $value)
{
  mysql_query("INSERT INTO tbl_dates (date_value) VALUES '".$value."'");
}

来源:Print Y-m-d list of business dates between two dates from MySQL using PHP

OMG!我刚刚意识到这是一个由你开始的线程。你已经有了答案

答案 1 :(得分:0)

使用date('N', $timestamp)获取星期几的数字。然后,您可以检查这一天是否符合您的要求。

P.S。 PHP {5.1}中引入了date('N')

答案 2 :(得分:0)

根据您的PHP标记 - &gt;

编写您喜欢的代码
<?php

$_POST['start_date'] = '2012-10-01';
$_POST['end_date'] = '2012-10-10';

$start = explode('-',$_POST['start_date']);
$end   = explode('-',$_POST['end_date']);
$i = (int)$start[2];
for($i; $i<$end[2]; $i++)
{
$i = sprintf('%02d', $i);
echo "INSERT INTO tbl_dates (date_value) VALUES ('2012-10-$i')";
echo "<br />";
}

?>

<强>输出

INSERT INTO tbl_dates (date_value) VALUES ('2012-10-01')
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-02')
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-03')
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-04')
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-05')
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-06')
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-07')
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-08')
INSERT INTO tbl_dates (date_value) VALUES ('2012-10-09')