繁体   English   中英

PHP-如何根据两个POST日期显示年,月和日?

[英]PHP - how to display years,months and days based on two POST date?

我正在测试是否可以获取并显示基于发布的两个日期之间的持续时间。 这两个日期是从数据库中调用的。

这是在我单击“更新合同”之前 捕获2

这是在我单击“更新合同”之后 捕获1

Php:

<?php
require("config.php");
$id = filter_input(INPUT_GET, 'id');
error_reporting( ~E_NOTICE );

if(isset($_POST['edit']) ){     
    $startdate = date('Y-m-d', strtotime($_POST['startdate']));
    $expdate = date('Y-m-d', strtotime($_POST['expdate']));
    $diff = abs(strtotime($expdate) - strtotime($startdate));

    $years = floor($diff / (365*60*60*24));
    $months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
    $days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));

    $upd= "UPDATE `contracts` SET  `startdate` = ?, `expdate` = ? WHERE `id` = ?";
    $stmt = $con->prepare($upd);
    $stmt->bind_param("ssi",$startdate,$expdate,$id);
    $stmt->execute();

        if ($stmt->errno){
        echo "FAILURE!!! " . $stmt->error;
        } else {
        $successMsg =  "Contract Successfully Updated!";
        }
        $stmt->close();     

    }

printf("%d years, %d months, %d days\n", $years, $months, $days);
?>

形成:

<form method="post" action="">
    <?php
    if(isset($successMsg)){
    ?>
    <div class="alert alert-success">
    <strong><?php echo $successMsg; ?></strong>

    <?php
    }
    ?>
    <?php

    $id = filter_input(INPUT_GET, 'id');
    $sql = "SELECT * FROM contracts WHERE `id` = $id";
    $result = $con->query($sql);
    $row = $result->fetch_assoc();  

    ?>
        <label>Start Date</label>
        <input type="date" name="startdate" value="<?php echo $row['startdate']; ?>"/>

        <label>Expiry Date</label>
        <input type="date" name="expdate" value="<?php echo $row['expdate']; ?>"/>                              

        <button type="submit" class="btn btn-success btn-md" name="edit">
        <span class="glyphicon glyphicon-pencil"></span> Update Contract
        </button>
</form>

问题是:

  1. 如何显示持续时间,而无需单击“更新合同”以查看更新的持续时间?
  2. 显示的日期之间的更新期限不是确切的期限,因为它应该是1年11个月3天。

回答第二个问题:

利用本机DateTime类及其相关的DateInterval

<?php
$startdate=new DateTime($_POST['startdate']); 
$expdate=new DateTime($_POST['expdate']); 
$diff=$expdate->diff($startdate); 
print_r( $diff );
// or 
printf("%d years, %d months, %d days\n", $diff->y, $diff->m, $diff->d);

// for database input you'll have to format the dates like so:
echo $startdate->format('Y-m-d');

一个问题的解决方案就是重组代码。
我想这一切都在一个php文件中。

  • 检查您的表单是否已过帐,是否与您一样。
  • 如果是这样,请执行数据库更新
  • 如果不是,则从数据库中获取值-并设置相同的变量名称( $startdate = $row['startdate'] ;)
  • 无论如何都要进行上述计算
  • 然后显示您需要的内容(区别,形式,消息...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM