【问题标题】:PHP date compare older than 15 daysPHP 日期比较早于 15 天
【发布时间】:2013-10-21 04:26:52
【问题描述】:

我很长一段时间都在努力设定一个具体的日期,但我没有得到正确的输出。 我想从用户那里获取日期,并将该日期与比今天大 15 天的日期进行比较。如果超过 15 天,则转换为今天,否则打印它是什么。

$todaydate= $_GET['date'];// getting date as 201013 ddmmyy submitted by user
$todaydate=preg_replace("/[^0-9,.]/", "", $todaydate); 
$today =date("dmy"); //today ddmmyy
$older= date("dmy",strtotime("-15 day")); // before 15 days 051013
if ($todaydate <= $older){
$todaydate= $today;}

问题是,它以日期为数字并给出错误的结果。

【问题讨论】:

  • 我自己完成了,我的电子纸应用程序运行良好。

标签: php datetime


【解决方案1】:

比较日期字符串有点麻烦,而且容易失败。尝试比较实际的日期对象

$userDate = DateTime::createFromFormat('dmy', $_GET['date']);
if ($userDate === false) {
    throw new InvalidArgumentException('Invalid date string');
}
$cmp = new DateTime('15 days ago');
if ($userDate <= $cmp) {
    $userDate = new DateTime();
}

另外,strtotime 有一些严格的限制(请参阅http://php.net/manual/function.strtotime.php#refsect1-function.strtotime-notesand),并且在非美国语言环境中没有用处。 DateTime 类更加灵活和最新。

【讨论】:

  • localhost/test/index.php?date=211013 可捕获的致命错误:DateTime 类的对象无法在第 10 行的 C:\wamp\www\test\index.php 中转换为字符串
  • @Ravikant 究竟是什么让你认为你可以简单地 echo 一个 DateTime 对象?您的问题中也没有提到这一点。看看DateTime::format
【解决方案2】:

试试这个:

<?php
$todaydate = date(d-m-Y,strtotime($_GET['date']));
$today = date("d-m-Y");
$older= date("d-m-Y",strtotime("-15 day"));

if (strtotime($todaydate) <= strtotime($older)) 
{
$todaydate= $today;
}
?>

【讨论】:

    【解决方案3】:
    $previousDate = "2012-09-30";
    
    if (strtotime($previousDate) <= strtotime("-15 days")) {
        //the date in $previousDate is earlier or is equal to the date 15 days before from today
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 2014-04-20
      • 2012-07-30
      • 2017-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多