$period['start'], 'end' => $period['end'], ); } $custom_start = $period['start_date'] ?? ''; $custom_end = $period['end_date'] ?? ''; $period = $period['period'] ?? 'last_30_days'; } if ( function_exists( 'current_datetime' ) ) { $now = current_datetime(); } else { $tz = function_exists( 'wp_timezone' ) ? wp_timezone() : new DateTimeZone( 'UTC' ); $now = new DateTimeImmutable( 'now', $tz ); } $start_dt = $now->setTime( 0, 0, 0 ); $end_dt = $now->setTime( 23, 59, 59 ); switch ( $period ) { case 'today': $start_dt = $now->setTime( 0, 0, 0 ); $end_dt = $now->setTime( 23, 59, 59 ); break; case 'yesterday': $yesterday = $now->modify( '-1 day' ); $start_dt = $yesterday->setTime( 0, 0, 0 ); $end_dt = $yesterday->setTime( 23, 59, 59 ); break; case 'last_7_days': $start_dt = $now->modify( '-7 days' )->setTime( 0, 0, 0 ); $end_dt = $now->setTime( 23, 59, 59 ); break; case 'last_30_days': $start_dt = $now->modify( '-30 days' )->setTime( 0, 0, 0 ); $end_dt = $now->setTime( 23, 59, 59 ); break; case 'this_month': $start_dt = $now->modify( 'first day of this month' )->setTime( 0, 0, 0 ); $end_dt = $now->setTime( 23, 59, 59 ); break; case 'last_month': $last_month = $now->modify( 'first day of last month' ); $start_dt = $last_month->setTime( 0, 0, 0 ); $end_dt = $now->modify( 'last day of last month' )->setTime( 23, 59, 59 ); break; case 'this_year': $start_dt = $now->setDate( (int) $now->format( 'Y' ), 1, 1 )->setTime( 0, 0, 0 ); $end_dt = $now->setTime( 23, 59, 59 ); break; case 'last_year': $last_year_num = (int) $now->format( 'Y' ) - 1; $start_dt = $now->setDate( $last_year_num, 1, 1 )->setTime( 0, 0, 0 ); $end_dt = $now->setDate( $last_year_num, 12, 31 )->setTime( 23, 59, 59 ); break; case 'last_12_months': $start_dt = $now->modify( '-12 months' )->setTime( 0, 0, 0 ); $end_dt = $now->setTime( 23, 59, 59 ); break; case 'all_time': return array( 'start' => '1970-01-01 00:00:00', 'end' => $end_dt->format( 'Y-m-d H:i:s' ), ); case 'custom': $start_str = ! empty( $custom_start ) ? gmdate( 'Y-m-d 00:00:00', strtotime( $custom_start ) ) : '1970-01-01 00:00:00'; $end_str = ! empty( $custom_end ) ? gmdate( 'Y-m-d 23:59:59', strtotime( $custom_end ) ) : $end_dt->format( 'Y-m-d H:i:s' ); return array( 'start' => $start_str, 'end' => $end_str, ); default: $start_dt = $now->modify( '-30 days' )->setTime( 0, 0, 0 ); $end_dt = $now->setTime( 23, 59, 59 ); break; } return array( 'start' => $start_dt->format( 'Y-m-d H:i:s' ), 'end' => $end_dt->format( 'Y-m-d H:i:s' ), ); } }