0

我目前正在研究一种允许人们预订旅馆住宿的小表格。基本上,我让他们选择两个日期。(到达日和出发日)然后我想以天数计算这些日期之间的差异,最后我想将天数乘以每天的价格。

我似乎无法弄清楚如何计算每天的天数 * 价格并将该字符串传递给我表单中的“金额值”

这是我到目前为止得到的:

<input type="text" id="datepicker" value="arrival (day-month-year)" />
<input type="text" id="datepicker2" value="departure (day-month-year)" />

<form action="checkout.php" method="post">
    <input name="amount" type="hidden" value="$dateDiff * price per day = value">
    <input type="submit" value="Check out" id="checkout">
</form>

还有我的 PHP

<?php   
$date1 = ("#datepicker");
$date2 = ("#datepicker2");
$dateDiff = $date1 - $date2;
$fullDays = floor($dateDiff/(60*60*24));
echo "Difference is $fullDays days";  
?>

编辑:在前两条评论之后,让我解释一下我对 PHP 还很陌生。谢谢。

4

3 回答 3

2

datetime对象提供了一个diff功能:

http://php.net/manual/en/datetime.diff.php

$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
print_r($interval);

DateInterval 对象 ( [y] => 0 [m] => 0 [d] => 2 [h] => 0 [i] => 0 [s] => 0 [invert] => 0 [days] => 2)

所以你可以计算你的价格

$price = $pricePerDay * $interval->days;
于 2013-03-05T08:56:06.830 回答
2

您必须将输入字段放入表单中并为其命名,如下所示:

<form action="checkout.php" method="post">
    <input type="text" id="datepicker" name="datepicker" value="arrival (day-month-year)" />
    <input type="text" id="datepicker2" name="datepicker2" value="departure (day-month-year)" />
    <input name="amount" type="hidden" value="$dateDiff * price per day = value">
    <input type="submit" value="Check out" id="checkout">
</form>

现在在您的 PHP 文件中:

<?php
  if(isset($_POST["datepicker"], $_POST["datepicker2"])){
    $date1 = new DateTime($_POST["datepicker"]);
    $date2 = new DateTime($_POST["datepicker2"]);
    $diff = $date1->diff($date2);
    $amount_per_day = 10; // for example 10 dollars
    $total = floor($diff["days"]) * $amount_per_day; // total
  }
?>
于 2013-03-05T09:01:05.997 回答
1

试试这个:

function dateDiff($start, $end)
{
$start_ts = strtotime($start);
$end_ts = strtotime($end);
$diff = $end_ts - $start_ts;
return round($diff / 86400);
}
于 2013-03-05T08:58:29.810 回答