【问题标题】:PHP function to loop business days between two posted dates [duplicate]PHP函数在两个发布日期之间循环工作日[重复]
【发布时间】:2012-10-31 08:08:58
【问题描述】:

可能重复:
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');

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

如何创建循环?

【问题讨论】:

  • +1 解释清楚
  • 我不建议这样做,这不是标准的数据库设计。它将提供大量数据重复

标签: php date loops


【解决方案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

天哪!我才意识到这是你发起的一个话题。你已经有了答案

【讨论】:

  • 请不要从 StackOverflow 上的其他问题中复制代码。如果答案存在,您可以从中复制代码,这意味着您要粘贴的问题是重复的。
  • 我复制的部分是解决方案的一部分。我还包括下一部分以完成解决方案。这也是我在帖子中提到来源的原因。
【解决方案2】:

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

附: date('N') 在 PHP 5.1.0 中引入

【讨论】:

  • 如果您担心PHP版本,可以使用w
  • @SalmanA:感谢您的关注。在格式列表中没有看到。
【解决方案3】:

仅基于您的 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 />";
}

?>

输出

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')

【讨论】:

  • 此代码不排除周六和周日,但还是谢谢。
  • @David 啊我的错,我只是错过了这一点并认为这是一个循环问题
猜你喜欢
  • 2020-06-08
  • 1970-01-01
  • 2020-11-20
  • 2018-10-02
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 2021-01-18
相关资源
最近更新 更多