Cron task with scheduled timestamp in the past

I´m doing some setting to enabledisable a cron task and choose a time to run this task.When I disable the cron task an

I´m doing some setting to enable/disable a cron task and choose a time to run this task.

When I disable the cron task and enable it after without changed the time, my timestamp is in the past and make this error :

WP Control Plugin Result

My code

function scheduled_task_activation(){
    $hook = 'my_hook';
    $options_values = get_option( "option_name" );
    $is_cron_active = (!empty( $options_values['cron-sync-active'] ) ) ? true : false;
    $cron_sync_time = (!empty( $options_values['cron-sync-time'] ) ) ? $options_values['cron-sync-time']: "00:00:00";
    if( !$is_cron_active ){
        if( wp_next_scheduled( $hook ) ){
            wp_clear_scheduled_hook( $hook );
        }
    }
    else if ( ! wp_next_scheduled( $hook ) || ( $cron_sync_time !== get_option( "cron_time_used") )  ) {
        if( $cron_sync_time !== get_option( "cron_time_used" ) )
            wp_clear_scheduled_hook( $hook ); //avoid dupplication
        var_dump( $cron_sync_time ); //Output : (string) "04:30"
        wp_schedule_event( strtotime($cron_sync_time), 'daily', $hook);
        update_option( "cron_time_used", $cron_sync_time );
    }
}

If $cron_sync_time is a string "04:30", why the timestamp should be in the past ? Someone knows the way to fix this ?

I´m doing some setting to enable/disable a cron task and choose a time to run this task.

When I disable the cron task and enable it after without changed the time, my timestamp is in the past and make this error :

WP Control Plugin Result

My code

function scheduled_task_activation(){
    $hook = 'my_hook';
    $options_values = get_option( "option_name" );
    $is_cron_active = (!empty( $options_values['cron-sync-active'] ) ) ? true : false;
    $cron_sync_time = (!empty( $options_values['cron-sync-time'] ) ) ? $options_values['cron-sync-time']: "00:00:00";
    if( !$is_cron_active ){
        if( wp_next_scheduled( $hook ) ){
            wp_clear_scheduled_hook( $hook );
        }
    }
    else if ( ! wp_next_scheduled( $hook ) || ( $cron_sync_time !== get_option( "cron_time_used") )  ) {
        if( $cron_sync_time !== get_option( "cron_time_used" ) )
            wp_clear_scheduled_hook( $hook ); //avoid dupplication
        var_dump( $cron_sync_time ); //Output : (string) "04:30"
        wp_schedule_event( strtotime($cron_sync_time), 'daily', $hook);
        update_option( "cron_time_used", $cron_sync_time );
    }
}

If $cron_sync_time is a string "04:30", why the timestamp should be in the past ? Someone knows the way to fix this ?

Share Improve this question edited Jun 23, 2020 at 14:29 J.BizMai asked Jun 23, 2020 at 13:58 J.BizMaiJ.BizMai 9002 gold badges10 silver badges30 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 0

The reason is when you set only a time without date, the php function strtotime() by default add today as a date so if the time is "04:30", the timestamp is in the past.

I fixed like this :

  $timestamp = strtotime( $cron_sync_time );
  if( $timestamp < time() ){ //if the time already past today
      $timestamp = $timestamp + 60 * 60 * 24; //add 1 day
  }
  wp_schedule_event( $timestamp, 'daily', $hook);

Full code

function scheduled_task_activation(){
    $hook = 'my_hook';
    $options_values = get_option( "option_name" );
    $is_cron_active = (!empty( $options_values['cron-sync-active'] ) ) ? true : false;
    $cron_sync_time = (!empty( $options_values['cron-sync-time'] ) ) ? $options_values['cron-sync-time']: "00:00:00";
    if( !$is_cron_active ){
        if( wp_next_scheduled( $hook ) ){
            wp_clear_scheduled_hook( $hook );
        }
    }
    else if ( ! wp_next_scheduled( $hook ) || ( $cron_sync_time !== get_option( "cron_time_used") )  ) {
        if( $cron_sync_time !== get_option( "cron_time_used" ) )
            wp_clear_scheduled_hook( $hook ); //avoid dupplication
        $timestamp = strtotime( $cron_sync_time );
        if( $timestamp < time() ){
            $timestamp = $timestamp + 60 * 60 * 24;
        }
        wp_schedule_event( $timestamp, 'daily', $hook);
        update_option( "cron_time_used", $cron_sync_time );
    }
}

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1742324548a4422483.html

相关推荐

  • Cron task with scheduled timestamp in the past

    I´m doing some setting to enabledisable a cron task and choose a time to run this task.When I disable the cron task an

    13小时前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信