2015-11-29 64 views
1

获取followoing错误:警告:日期()预计参数2长,

Warning: date() expects parameter 2 to be long, string given in /home/users/2/catfood.jp-cybercat/web/academy/wp-includes/functions.php on line 112

指向行:

$datemonth = $wp_locale->get_month($datefunc('m', $i)); 

需要上面的行什么样的改变来解决这个?

这里是整个代码

function date_i18n($dateformatstring, $unixtimestamp = false, $gmt = false) { 
global $wp_locale; 
$i = $unixtimestamp; 

if (false === $i) { 
    if (! $gmt) 
     $i = current_time('timestamp'); 
    else 
     $i = time(); 
    // we should not let date() interfere with our 
    // specially computed timestamp 
    $gmt = true; 
} 

/* 
* Store original value for language with untypical grammars. 
* See https://core.trac.wordpress.org/ticket/9396 
*/ 
$req_format = $dateformatstring; 

$datefunc = $gmt? 'gmdate' : 'date'; 

if ((!empty($wp_locale->month)) && (!empty($wp_locale->weekday))) { 
    $datemonth = $wp_locale->get_month($datefunc('m', $i)); 
    $datemonth_abbrev = $wp_locale->get_month_abbrev($datemonth); 
    $dateweekday = $wp_locale->get_weekday($datefunc('w', $i)); 
    $dateweekday_abbrev = $wp_locale->get_weekday_abbrev($dateweekday); 
    $datemeridiem = $wp_locale->get_meridiem($datefunc('a', $i)); 
    $datemeridiem_capital = $wp_locale->get_meridiem($datefunc('A', $i)); 
    $dateformatstring = ' '.$dateformatstring; 
    $dateformatstring = preg_replace("/([^\\\])D/", "\\1" . backslashit($dateweekday_abbrev), $dateformatstring); 
    $dateformatstring = preg_replace("/([^\\\])F/", "\\1" . backslashit($datemonth), $dateformatstring); 
    $dateformatstring = preg_replace("/([^\\\])l/", "\\1" . backslashit($dateweekday), $dateformatstring); 
    $dateformatstring = preg_replace("/([^\\\])M/", "\\1" . backslashit($datemonth_abbrev), $dateformatstring); 
    $dateformatstring = preg_replace("/([^\\\])a/", "\\1" . backslashit($datemeridiem), $dateformatstring); 
    $dateformatstring = preg_replace("/([^\\\])A/", "\\1" . backslashit($datemeridiem_capital), $dateformatstring); 

    $dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring) -1); 
} 
$timezone_formats = array('P', 'I', 'O', 'T', 'Z', 'e'); 
$timezone_formats_re = implode('|', $timezone_formats); 
if (preg_match("/$timezone_formats_re/", $dateformatstring)) { 
    $timezone_string = get_option('timezone_string'); 
    if ($timezone_string) { 
     $timezone_object = timezone_open($timezone_string); 
     $date_object = date_create(null, $timezone_object); 
     foreach($timezone_formats as $timezone_format) { 
      if (false !== strpos($dateformatstring, $timezone_format)) { 
       $formatted = date_format($date_object, $timezone_format); 
       $dateformatstring = ' '.$dateformatstring; 
       $dateformatstring = preg_replace("/([^\\\])$timezone_format/", "\\1" . backslashit($formatted), $dateformatstring); 
       $dateformatstring = substr($dateformatstring, 1, strlen($dateformatstring) -1); 
      } 
     } 
    } 
} 
$j = @$datefunc($dateformatstring, $i); 

/** 
* Filter the date formatted based on the locale. 
* 
* @since 2.8.0 
* 
* @param string $j   Formatted date string. 
* @param string $req_format Format to display the date. 
* @param int $i   Unix timestamp. 
* @param bool $gmt  Whether to convert to GMT for time. Default false. 
*/ 
$j = apply_filters('date_i18n', $j, $req_format, $i, $gmt); 
return $j; 
} 
+0

你能提供get_month()和datefunc()函数的定义/ –

+1

什么是'$ i'和什么是'$ datefunc'?也许在'$ i'上运行'strtotime' ... – chris85

+0

感谢您的意见。我添加了功能的整个代码,请看看。 –

回答

0

$datefunc显然是一个别名PHP的日期方法。如果是这样的话,你试图让月份传递一个整数1-12。当你不能这样做时,你需要将时间戳传递给PHP的日期方法,然后根据你传递的属性,因为选项会返回以下数据。然后,您将它传递给wordpress locale get_month方法,该方法返回月份的名称。您需要重构代码,以便$ i不是for循环变量。如果你只是想获得1至12月只是做

$i = 1; 
$monthArray = []; 

do { 

    // Just push the months to an array and pass it to the view 
    array_push($monthArray, $wp_locale->get_month($i); 
    $i++; 

} while($i < 13); 

然后做你需要做什么用。如果您从数据库获取记录,则需要在返回的模型中访问相应的值。否则,你传递一个数组对象。如果您正在访问一个模型,你应该做的)

// Access the property that you intended to retrieve the month on. 
$datemonth = $wp_locale->get_month($datefunc('m', $i['published_at'])); 
+0

感谢您的回复,但我是初学者,我不知道您在说什么。我添加了该函数的全部代码。请看看它。 –

+0

@你是在哪里使用这个函数在你的代码库?这是一个核心的wordpress方法,你不应该去改变这些文件,除非你需要扩展已有的其他功能。你在wordpress项目的其他地方错误地使用了这个方法。我需要查看整个堆栈跟踪,以便为您确定实际发生的情况。 – djowinz

+0

哦,我明白了。我改变了很多代码。我再次上​​传插件,并没有显示任何问题。感谢你们对我的帮助。 :) –

1

我添加了一个名为“付费会员亲”插件,这个插件是用英文写的,我翻译成日语。有很多代码是这样的:

<?php printf(__('課金 #%s (%s)', 'pmpro'), $pmpro_invoice->code, date_i18n(get_option('date_format'), $pmpro_invoice->timestamp));?> 

我试过如下修改这些代码:

时间戳),$ pmpro_invoice->代码);>

我想这就是为什么它造成的问题。你怎么看?

现在我再次下载了插件,没有问题。

谢谢你帮助我。

相关问题