Skip to content

Commit

Permalink
= 4.2.7.6 =
Browse files Browse the repository at this point in the history
~ Tweak: format_human_time_diff, get_string_plural_duration methods
  • Loading branch information
tungnxt89 committed Dec 18, 2024
1 parent ac5d498 commit b415a4e
Showing 1 changed file with 55 additions and 33 deletions.
88 changes: 55 additions & 33 deletions inc/class-lp-datetime.php
Original file line number Diff line number Diff line change
Expand Up @@ -144,12 +144,14 @@ public function format( string $format = '' ): string {
*
* @return string
* @since 4.0.3
* @version 1.0.3
* @version 1.0.4
*/
public static function format_human_time_diff( DateTime $date_start, DateTime $date_end ): string {
$diff = $date_end->diff( $date_start );
$week = floor( $diff->d / 7 );

$i18n_year = self::get_string_plural_duration( $diff->y, 'year' );
$i18n_month = self::get_string_plural_duration( $diff->m, 'month' );
$i18n_week = self::get_string_plural_duration( $week, 'week' );
$i18n_day = self::get_string_plural_duration( $diff->d, 'day' );
$i18n_hour = self::get_string_plural_duration( $diff->h, 'hour' );
Expand All @@ -169,38 +171,46 @@ public static function format_human_time_diff( DateTime $date_start, DateTime $d

foreach ( $string as $k => $v ) {
if ( isset( $diff->{$k} ) && $diff->{$k} > 0 ) {
if ( in_array( $k, array( 'y', 'm' ) ) ) {
$date = new LP_Datetime( $date_end->getTimestamp() );
$format_date = $date->format( LP_Datetime::I18N_FORMAT_HAS_TIME );
} else {
switch ( $k ) {
case 'd':
$format_date = sprintf(
'%1$s%2$s',
$i18n_day,
$diff->h > 0 ? ', ' . $i18n_hour : ''
);
break;
case 'h':
$format_date = sprintf(
'%1$s%2$s',
$i18n_hour,
$diff->i > 0 ? ', ' . $i18n_minute : ''
);
break;
case 'i':
$format_date = sprintf(
'%1$s%2$s',
$i18n_minute,
$diff->s > 0 ? ', ' . $i18n_second : ''
);
break;
default:
$format_date = $v;
break;
}
switch ( $k ) {
case 'y':
$format_date = sprintf(
'%1$s%2$s',
$i18n_year,
$diff->m > 0 ? ', ' . $i18n_month : ''
);
break;
case 'm':
$format_date = sprintf(
'%1$s%2$s',
$i18n_month,
$diff->d > 0 ? ', ' . $i18n_day : ''
);
break;
case 'd':
$format_date = sprintf(
'%1$s%2$s',
$i18n_day,
$diff->h > 0 ? ', ' . $i18n_hour : ''
);
break;
case 'h':
$format_date = sprintf(
'%1$s%2$s',
$i18n_hour,
$diff->i > 0 ? ', ' . $i18n_minute : ''
);
break;
case 'i':
$format_date = sprintf(
'%1$s%2$s',
$i18n_minute,
$diff->s > 0 ? ', ' . $i18n_second : ''
);
break;
default:
$format_date = $v;
break;
}
break;
} elseif ( 'w' === $k && $week > 0 ) {
$day_remain = $diff->d - $week * 7;
$format_date = sprintf(
Expand Down Expand Up @@ -284,7 +294,7 @@ public function getTimestampLocal(): int {
* @param string $duration_type
*
* @return string
* @version 1.0.3
* @version 1.0.4
* @since 4.2.3.5
*/
public static function get_string_plural_duration( float $duration_number, string $duration_type = '' ): string {
Expand Down Expand Up @@ -319,6 +329,18 @@ public static function get_string_plural_duration( float $duration_number, strin
$duration_number
);
break;
case 'month':
$duration_str = sprintf(
_n( '%s Month', '%s Months', $duration_number, 'learnpress' ),
$duration_number
);
break;
case 'year':
$duration_str = sprintf(
_n( '%s Year', '%s Years', $duration_number, 'learnpress' ),
$duration_number
);
break;
default:
$duration_str = $duration_number . ' ' . $duration_type;
}
Expand Down

0 comments on commit b415a4e

Please sign in to comment.