Archive Custom Post Type

@DarrenLee, to add multiple post types on your code, you just make a change on function cpt_rewrite_rules. Create an array of your post types, put function cpt_generate_date_archives inside loop.

function cpt_rewrite_rules($wp_rewrite)
{
    $post_types = array( 'book', 'movie', 'etc' ); //create post_types array

    $rules = array();
    foreach( $post_types as $post_type )
    {
        /* generate date archives */
        $rule = cpt_generate_date_archives( $post_type, $wp_rewrite );
        foreach( $rule as $k => $v )
            $rules[ $k ] = $v;
    }

    $wp_rewrite->rules = $rules + $wp_rewrite->rules; // combine rules

    return $wp_rewrite;
}
add_action('generate_rewrite_rules', 'cpt_rewrite_rules');