【问题标题】:php date() and expiration date()php 日期()和到期日期()
【发布时间】:2016-04-19 16:13:47
【问题描述】:

我正在用 PHP 创建一个应用程序,它允许用户创建一个最初持续 7 天的“帖子”,并且用户可以随时添加 7 天的增量。我在使用 php date('Y-m-d H:i:s') 函数时遇到了障碍,并在启动“帖子”后从数据库中提取的已经建立的开始日期中添加天数......

$timestamp = "2016-04-20 00:37:15";
$start_date = date($timestamp);

$expires = strtotime('+7 days', $timestamp);
//$expires = date($expires);

$date_diff=($expires-strtotime($timestamp)) / 86400;

echo "Start: ".$timestamp."<br>";
echo "Expire: ".$expires."<br>";

echo round($date_diff, 0)." days left";

这就是我目前所拥有的,它对我的​​作用并不大。谁能告诉我一个正确方法的例子吗?

【问题讨论】:

  • 您陷入了两个常见的陷阱:使用字符串处理日期并假设计算非常简单以至于您不需要日期函数 (/86400)。此外,您的代码应该触发您显然看不到的通知(遇到格式不正确的数值):这意味着您尚未将开发框配置为显示错误消息。

标签: php date datetime timestamp


【解决方案1】:

你差点搞定了,你忘了在添加 7 天之前将 $timestamp 转换为时间戳。

$timestamp = "2016-04-20 00:37:15";
$start_date = date($timestamp);

$expires = strtotime('+7 days', strtotime($timestamp));
//$expires = date($expires);

$date_diff=($expires-strtotime($timestamp)) / 86400;

echo "Start: ".$timestamp."<br>";
echo "Expire: ".date('Y-m-d H:i:s', $expires)."<br>";

echo round($date_diff, 0)." days left";

【讨论】:

  • 已经是字符串了,忘记转成时间戳了。
  • 这就是我错过的。太棒了,它现在在我的脑海里点击。谢谢!
【解决方案2】:

一种可能的方式:

/* PHP/5.5.8 and later */
$start = new DateTimeImmutable('2016-04-20 00:37:15');
$end = $start->modify('+7 days');
$diff = $end->diff($start);

您可以根据自己的喜好格式化$diff。由于您似乎需要几天:

echo $diff->format('%d days');

(demo)

对于旧版本,语法稍微复杂一些:

/* PHP/5.3.0 and later */
$start = new DateTime('2016-04-20 00:37:15');
$end = clone $start;
$end = $end->modify('+7 days');
$diff = $end->diff($start);

(demo)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多