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

PHP函数在两个发布日期之间循环工作日,php,date,loops,Php,Date,Loops,可能重复: 我不熟悉这种PHP编程,所以请耐心听我说 我希望用户能够发布两个日期,一个startdate和一个enddate,并从这些日期计算业务日期(不包括周六和周日),然后将其插入MySQL 例如,如果我有这个表格 <form action='update.php' method='post'> <input type='text' name='start_date'> <input type='text' name='end_date'>

可能重复:

我不熟悉这种PHP编程,所以请耐心听我说

我希望用户能够发布两个日期,一个startdate和一个enddate,并从这些日期计算业务日期(不包括周六和周日),然后将其插入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>
现在,我想循环查看日期并创建一个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');
我知道这可能不是一个好的解决方案,但这正是我所需要的

如何创建循环?

用于获取一周中某一天的编号。然后,您可以检查这一天是否符合您的要求

p.S.
date('N')
是在PHP5.1.0中引入的

用于获取一周中某一天的数字。然后,您可以检查这一天是否符合您的要求

$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."'");
}
p.S.
date('N')
是在PHP5.1.0中引入的

$startDate=$start\u date;
$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."'");
}
$endDate=$send\u date; //转换为UNIX时间戳 $currentTime=strotTime($startDate); $endTime=strottime($endDate); //循环直到我们到达最后一天 $result=array(); 而($currentTime
$startDate=$start\u date;
$endDate=$send\u date;
//转换为UNIX时间戳
$currentTime=strotTime($startDate);
$endTime=strottime($endDate);
//循环直到我们到达最后一天
$result=array();

而($currentTime仅基于PHP标记以自己的风格编写代码->

<?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 />";
}

?>

仅基于PHPtag->

<?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 />";
}

?>

+1对于清晰的解释,我不建议这样做,它不是标准的数据库设计。它将提供大量的数据重复+1对于清晰的解释,我不建议这样做,它不是标准的数据库设计。它将提供大量的数据重复。如果您担心PHP版本,您可以使用
w
。@Salman答:谢谢注意。在格式列表中没有看到。如果您担心PHP版本,可以使用
w
。@SalmanA:谢谢注意。在格式列表中没有看到。请不要从StackOverflow上的其他问题复制代码。如果存在答案,您可以从中复制代码,这意味着您要将其粘贴到的问题是重复的。我复制的部分是解决方案的一部分。我还包括了完成解决方案的下一部分。这也是我在帖子中提到源代码的原因。请不要复制StackOverflow上其他问题的代码。如果存在答案,您可以从中复制代码,这意味着您要将其粘贴到的问题是重复的副本。我复制的部分是解决方案的一部分。我还包括了完成解决方案的下一部分。这就是我在帖子中也提到源代码的原因。此代码不排除周六和周日,但无论如何感谢。@David啊,我的错,我只是误解了这一点&认为这是一个仅循环的问题此代码不排除此问题周六和周日,但无论如何还是要感谢。@David啊,我的错,我只是误解了这一点&认为这只是一个循环问题