簡體   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