【问题标题】:Calculate number of days between two days on certain condition在特定条件下计算两天之间的天数
【发布时间】:2020-02-24 09:48:06
【问题描述】:

我想计算订阅天数 ($dat) 和持续时间 ($duration) 之间的天数,可能是 1 个月、3 个月或 6 个月。如果持续时间为 1 个月,我想从订阅之日起增加 30 天,并每天减少计数,直到它变为 0 并在表格中显示。我不知道如何减少计数并创建条件。

c_details.php

<?php while($rows=mysqli_fetch_assoc($result)) {?>       
    <tr>
        <td><?php echo $rows['id']; ?></td>
        <td><?php
        $time=new DateTime(date('Y-m-d', strtotime('$dat')));
        $time1=date("Y-m-d", strtotime("+1 month", $time));;
        $interval=date_diff($time1, $time);
        echo $interval->format('%a days');
        </td>
    </tr>
?>

sub_details.php

<?php
if (isset($_POST['submit'])) {
session_start();
/* 
$email = $_POST['email']; */
$newspaper = $_POST['paper'];      // Paper
$duration = $_POST['duration'];     // Duration
$price = $_POST['price_hidden']; // total
$dat = date('Y-m-d');            //date of subscription
$name = $_SESSION['login_user'];
?>

【问题讨论】:

  • 您有订阅开始日期/时间的变量吗?
  • 是的,它在 sub_details.php 中。 $dat 是订阅日期。
  • 好的,我明白了。当前的持续时间似乎是从今天的时间戳中减去的起始时间戳。剩下的时间将从总持续时间中减去当前持续时间。
  • 所以你想让用户输入持续时间并从日期开始订阅到持续时间(1/3/6个月)对吧?
  • 是的,你是对的

标签: php html mysql


【解决方案1】:

根据您的最新代码更新

$time  = new DateTime(date('Y-m-d')); // Todays date
$time1 = new DateTime(date('Y-m-d')); // Todays date
$time1->add(new DateInterval('P1M')); // Adds 1 month to $time1
$interval = date_diff($time1, $time); // The interval between $time1 and $time
echo $interval->format('%a days'); // Outputs 29 days

真正问题的解决方法:

  1. 计算订阅结束日期并将其保存在数据库中。
  2. 然后显示距离订阅结束日期还有多少天

根据duration计算订阅结束日期。

$dateNow = new DateTime();// today's date
// P1M will add one month. You can change the interval based on the duration selected
$subscriptionEndDate = $dateNow->add(new DateInterval("P1M"));
echo $subscriptionEndDate->format('Y-m-d h:i:s');


// You can even use 
$subscriptionEndDate = $dateNow->modify("+ 60 days");
// Check out PHP documentation for more cool ways to do this

阅读更多关于 PHP DateTime 类here

将订阅结束日期保存在数据库表的subscription_end_date 列中。

现在使用适当的方法(基于您在数据库表中保存日期的方式)来获取当前日期和订阅结束日期之间的差异。

例如:

使用MySQLTIMESTAMPDIFF函数

SELECT TIMESTAMPDIFF(DAY, CURDATE(), '2020-02-29');

【讨论】:

  • 感谢您的帮助,但我需要以表格格式显示。我试图显示,但它没有显示任何值。这是我的代码 format("%a days"); ?>
  • 几个问题:SESSION 变量设置是否正确?什么是 $edate?你这句话是什么意思?
  • 会话变量设置正确。 $e_date 是订阅结束日期。该语句应在表格中显示剩余天数,但未显示任何值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多