PHP新手求助:用PHP、MySQL计算两日期总天数并在HTML展示
计算两个日期之间的准确总天数(含HTML表单展示)
PHP 实现方案
问题出在date_diff返回的是两个日期的间隔天数(不含其中一端),而你需要的是包含起始日和结束日的总天数,只需将结果加1即可。
完整代码(HTML表单+PHP处理)
<!DOCTYPE html> <html> <body> <form method="post"> <label for="date_fm">起始日期 (dd-mm-yy):</label> <input type="text" id="date_fm" name="date_fm" value="10-10-22"><br><br> <label for="date_to">结束日期 (dd-mm-yy):</label> <input type="text" id="date_to" name="date_to" value="20-10-22"><br><br> <input type="submit" name="submit" value="计算总天数"> </form> <?php if(isset($_POST['submit'])){ // 转换输入的dd-mm-yy格式为PHP可识别的DateTime对象 $date_fm = DateTime::createFromFormat('d-m-y', $_POST['date_fm']); $date_to = DateTime::createFromFormat('d-m-y', $_POST['date_to']); if($date_fm && $date_to){ // 计算日期间隔 $interval = $date_fm->diff($date_to); // 总天数 = 间隔天数 + 1(包含起始日) $total_days = $interval->days + 1; echo "<p>总天数: $total_days</p>"; } else { echo "<p>请输入正确的日期格式(dd-mm-yy)</p>"; } } ?> </body> </html>
MySQL 实现方案
用MySQL计算时,同样需要对DATEDIFF()的结果加1,才能得到包含两端日期的总天数:
基础查询示例
-- 先将dd-mm-yy格式转换为MySQL支持的yyyy-mm-dd格式 SELECT DATEDIFF(STR_TO_DATE('20-10-22', '%d-%m-%y'), STR_TO_DATE('10-10-22', '%d-%m-%y')) + 1 AS total_days;
执行后会返回11,符合你的预期。
PHP结合MySQL的示例
如果需要通过PHP调用数据库计算:
<?php // 数据库连接信息 $conn = new mysqli('localhost', 'your_username', 'your_password', 'your_dbname'); if(isset($_POST['submit'])){ $date_fm = $_POST['date_fm']; $date_to = $_POST['date_to']; // 预处理查询,避免SQL注入 $stmt = $conn->prepare("SELECT DATEDIFF(STR_TO_DATE(?, '%d-%m-%y'), STR_TO_DATE(?, '%d-%m-%y')) + 1 AS total_days"); $stmt->bind_param("ss", $date_to, $date_fm); $stmt->execute(); $result = $stmt->get_result(); $row = $result->fetch_assoc(); echo "<p>总天数: " . $row['total_days'] . "</p>"; $stmt->close(); $conn->close(); } ?>
内容的提问来源于stack exchange,提问作者Nilesh B
相关产品推荐
相关产品推荐

