Update pagex.class.php
Fix deprecated dynamic property creation and week calculation in relativeTime function - Resolved deprecated warning by avoiding dynamic property creation on DateInterval object. - Calculated weeks separately and included them correctly in the output string. - Adjusted the logic to handle weeks within the string array without creating a dynamic property. - Ensured compatibility with PHP 8.2 and higher, where dynamic properties are deprecated. This fix prevents the "Deprecated: Creation of dynamic property DateInterval::$w is deprecated" warning and correctly formats the relative time string.
This commit is contained in:
parent
4412f339cc
commit
593f5b3aed
1 changed files with 38 additions and 31 deletions
|
@ -543,38 +543,45 @@ class Page
|
||||||
// $complete = false : short version
|
// $complete = false : short version
|
||||||
// $complete = true : full version
|
// $complete = true : full version
|
||||||
public function relativeTime($complete = false)
|
public function relativeTime($complete = false)
|
||||||
{
|
{
|
||||||
$current = new DateTime;
|
$current = new DateTime;
|
||||||
$past = new DateTime($this->getValue('dateRaw'));
|
$past = new DateTime($this->getValue('dateRaw'));
|
||||||
$elapsed = $current->diff($past);
|
$elapsed = $current->diff($past);
|
||||||
|
|
||||||
|
// Calculate weeks separately
|
||||||
|
$weeks = floor($elapsed->d / 7);
|
||||||
|
$elapsed->d -= $weeks * 7;
|
||||||
|
|
||||||
|
$string = array(
|
||||||
|
'y' => 'year',
|
||||||
|
'm' => 'month',
|
||||||
|
'w' => $weeks,
|
||||||
|
'd' => 'day',
|
||||||
|
'h' => 'hour',
|
||||||
|
'i' => 'minute',
|
||||||
|
's' => 'second',
|
||||||
|
);
|
||||||
|
|
||||||
$elapsed->w = floor($elapsed->d / 7);
|
foreach ($string as $key => &$value) {
|
||||||
$elapsed->d -= $elapsed->w * 7;
|
if ($key == 'w') {
|
||||||
|
if ($weeks > 0) {
|
||||||
$string = array(
|
$value = $weeks . ' week' . ($weeks > 1 ? 's' : '');
|
||||||
'y' => 'year',
|
} else {
|
||||||
'm' => 'month',
|
unset($string[$key]);
|
||||||
'w' => 'week',
|
}
|
||||||
'd' => 'day',
|
} elseif ($elapsed->$key) {
|
||||||
'h' => 'hour',
|
$value = $elapsed->$key . ' ' . $value . ($elapsed->$key > 1 ? 's' : '');
|
||||||
'i' => 'minute',
|
} else {
|
||||||
's' => 'second',
|
unset($string[$key]);
|
||||||
);
|
}
|
||||||
|
}
|
||||||
foreach ($string as $key => &$value) {
|
|
||||||
if ($elapsed->$key) {
|
if (!$complete) {
|
||||||
$value = $elapsed->$key . ' ' . $value . ($elapsed->$key > 1 ? 's' : ' ');
|
$string = array_slice($string, 0, 1);
|
||||||
} else {
|
}
|
||||||
unset($string[$key]);
|
|
||||||
}
|
return $string ? implode(', ', $string) . ' ago' : 'Just now';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$complete) {
|
|
||||||
$string = array_slice($string, 0, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $string ? implode(', ', $string) . ' ago' : 'Just now';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns the value from the field, false if the fields doesn't exists
|
// Returns the value from the field, false if the fields doesn't exists
|
||||||
// If you set the $option as TRUE, the function returns an array with all the values of the field
|
// If you set the $option as TRUE, the function returns an array with all the values of the field
|
||||||
|
|
Loading…
Reference in a new issue