How to change post date only 1 time a day?

Compare the post_date with the current time and then test if the difference is greater than one day:

is_admin() or add_action( 'the_post', function( $post ) {

    if ( ! is_singular() or ! is_main_query() )
        return;

    // now minus last mod time in seconds
    $diff = time() - mysql2date( 'U', $post->post_date );

    if ( DAY_IN_SECONDS >= $diff )
        return;

    $post->post_date     = current_time( 'mysql' );
    $post->post_date_gmt="";

    wp_update_post( $post );
});