【问题标题】:DateTime diff not working correctly in Wordpress pageDateTime 差异在 Wordpress 页面中无法正常工作
【发布时间】:2012-02-04 06:45:45
【问题描述】:

所有, 我有以下 PHP 代码来确定我的 Wordpress 页面上两个日期相隔多少年:

<?php
$date1 = new DateTime("2003-03-24");
$current_date = new DateTime(date("Y-m-d"));
$interval = $date1->diff($current_date);
echo $interval->y;
?>

我为 Wordpress 安装了 Exec-PHP 插件以正确显示此内容。但是,当我尝试显示我的页面时,出现以下错误:

致命错误:调用未定义的方法 DateTime::diff() in /home/person/test.website.com/wp-content/plugins/exec-php/includes/runtime.php(42) : eval()'d 代码在第 7 行

我怎样才能让它正常工作?谢谢!

【问题讨论】:

  • 安装的是什么版本的php?
  • 这只是计算整年吗?写一个替代方案应该很简单
  • @OptimusCrime 它只计算整年。您有其他方法可以做到这一点吗?谢谢。
  • @user1048676 :作为答案发布。满意请采纳。

标签: php wordpress datetime diff


【解决方案1】:

我记得很久以前的这个问题:How to calculate the difference between two dates using PHP?

经过一些小的调整,它看起来像这样:

function convert_number($number) { 
    $Gn = floor($number / 1000000);  /* Millions (giga) */ 
    $number -= $Gn * 1000000; 
    $kn = floor($number / 1000);     /* Thousands (kilo) */ 
    $number -= $kn * 1000; 
    $Hn = floor($number / 100);      /* Hundreds (hecto) */ 
    $number -= $Hn * 100; 
    $Dn = floor($number / 10);       /* Tens (deca) */ 
    $n = $number % 10;               /* Ones */ 

    $res = ""; 

    if ($Gn)
        $res .= convert_number($Gn) . " Million"; 
    if ($kn)    { 
        $res .= (empty($res) ? "" : " ") . 
        convert_number($kn) . " Thousand"; 
    } 

    if ($Hn) { 
        $res .= (empty($res) ? "" : " ") . 
        convert_number($Hn) . " Hundred"; 
    } 

    $ones = array("", "One", "Two", "Three", "Four", "Five", "Six","Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen","Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eightteen","Nineteen"); 
    $tens = array("", "", "Twenty", "Thirty", "Fourty", "Fifty", "Sixty","Seventy", "Eigthy", "Ninety"); 

    if ($Dn || $n)  { 
        if (!empty($res))
            $res .= " and "; 

        if ($Dn < 2) 
        $res .= $ones[$Dn * 10 + $n]; 
        else { 
            $res .= $tens[$Dn]; 

            if ($n) 

            $res .= "-" . $ones[$n]; 
        } 
    } 

    if (empty($res)) 
        $res = "zero"; 

    return $res; 
} 

function yearsFromNow ($date) {
    return convert_number(floor(abs(strtotime($date) - strtotime(date("Y-m-d"))) / (365*60*60*24)));
}

echo yearsFromNow("2007-03-24");
echo yearsFromNow("2009-06-26");

输出:

4
2

从本站修改的数字转字母功能:http://www.phpro.org/examples/Convert-Numbers-to-Words.html

【讨论】:

  • 非常感谢您,效果很好。我得到的答案是 8。无论如何,根据返回的内容,是否可以将此读取为 8 或 4 等?
  • 你说的“读八四”是什么意思?用文字代替数字?
  • 我不太确定我是否明白这段代码的意义 - 它与 ceil ((time() - strtotime("2007-03-24")) / (60* 60 * 24 *365)) 之类的代码相比有什么优势?
【解决方案2】:

manual 中所述,DateTime::Diff(以及所有DateInterval 函数)仅在 PHP >= 5.3.0 中可用。

您需要安装该版本,或找到使用另一组功能的解决方法。 Here 是如何使用旧的基于时间戳的日期函数的示例。

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 2016-07-29
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多