【问题标题】:how to set well formed numeric value如何设置格式良好的数值
【发布时间】:2019-08-08 06:07:40
【问题描述】:

我试图找出两个日期之间的差异(一个是用户注册日期,另一个是当前日期)。如果当前日期距离注册日期超过一天,则会弹出消息“您有能力献血”。但它显示错误“遇到非格式良好的数值”。因为我是初学者,这对我来说是个大问题。期待你的帮助。提前致谢。

这是我的代码

 <?php 

                   $date= Session::get("donation_date");
                   if (isset($date)) {
                        $today= time();
                        $difference=($date- $date) > 1;
                        echo ' '.$difference.' you are capable to donate blood';
                   }


              ?>

【问题讨论】:

    标签: php


    【解决方案1】:

    您一方面使用 Unix 时间,另一方面使用字符串。
    Unix 时间是一个发送计数器,其值为整数。
    日期(我假设)类似于 2019-03-17,一个字符串。

    您可以使用 strtotime 将日期解析为 Unix,这样您就有两个可以相减的整数。
    结果是以秒为单位的差异,这意味着 86400 是一天(不考虑 DST)。

    $date= Session::get("donation_date");
    if (isset($date)) {
        $today = time();
        $difference = $today - strtotime($date);
        if ($difference > 864000) echo ' '.$difference.' you are capable to donate blood';
    }
    

    编辑:为了 strtotime 能够解析日期,它必须是可解析的格式。
    http://php.net/manual/en/datetime.formats.php
    如果不是,那么直接说出来,我会帮你解析日期。

    【讨论】:

    • @MimHsan 没问题!但请记住,代码在夏令时 +- 1 小时会有所不同。但我认为人们何时可以献血并不那么准确。随意接受它的答案对你有帮助。
    • 对不起,我认为它正在工作。但不幸的是它不起作用。
    • 好的..你能说得更具体点吗?
    • 在显示您有能力献血之前。但现在没有这样的消息。并且没有错误。登录后没有这样的消息
    • 我无法调试您的代码。你需要帮助我。变量的值是多少?
    【解决方案2】:

    看来你打错了:

    $difference=($date-$date) > 1;
    

    应该是:

    $difference=($today-$date) > 1;
    

    另外,最好确保$date 的格式正确,更新:

    if (isset($date)) {...}
    

    到:

    if (is_numeric($date)) {...}
    

    因为$date 始终设置为直接在上面分配的。 希望对你有帮助,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 2010-10-06
      • 1970-01-01
      相关资源
      最近更新 更多