Closest post to a date

Here is some code I drafted up. It may not be using the best practices or even work for the matter of fact, as I have not tested it, but theoretically it should work. 🙂

<?php
/**
 * Retrieve the closest post from a set time from today.
 * 
 * @param  integer $daysago the number of days 
 * @return integer the ID of the post from long ago
 **/

function wpse38126_filterfoward($where="", $daysago) { $where .= " AND post_date > '" . date('Y-m-d', strtotime('-' . $daysago . ' days')) . "'"; return $where; }
function wpse38126_filterbackward($where="", $daysago) { $where .= " AND post_date >= '" . date('Y-m-d', strtotime('-' . $daysago*2 . ' days')) . "'" . " AND post_date <= '" . date('Y-m-d', strtotime('-'.$daysago.' days')) . "'"; }
function wpse38126_limits($limits) { return 1; }
function wpse38126_postfromlongago( $daysago = '') {
    $month = date('n', strtotime('-' . $daysago . ' days'));
    $day   = date('j', strtotime('-' . $daysago . ' days'));
    $year  = date('Y', strtotime('-' . $daysago . ' days'));
    $query = new WP_Query(array(
        'month' => $month,
        'day' => $day,
        'year' => $year ));
    if($query->have_posts()) { while($query->have_posts()) { $query->the_post();
        return $post->ID;
    } } else {
        add_filter( 'posts_where', 'wpse38126_filterfoward' );
        add_filter( 'post_limits', 'wpse38126_limits' );
        $fowardintime = new WP_Query( $query_string . '&order=ASC&orderby=date' );
        remove_filter( 'posts_where', 'filtwpse38126_filterfowarder' );
        remove_filter( 'post_limits', 'wpse38126_limits' );

        add_filter( 'posts_where', 'wpse38126_filterbackward' );
        add_filter( 'post_limits', 'wpse38126_limits' );
        $backwardintime = new WP_Query( $query_string );
        remove_filter( 'posts_where', 'wpse38126_filterbackward' );
        remove_filter( 'post_limits', 'wpse38126_limits' );

        // set up posts
        if($fowardintime->have_posts) { while($fowardintime->have_posts()) { $fowardintime->the_post();
            $fowardintime_id = $post->ID; $fowardintime_date = get_the_date( 'Y/m/d g:i:s A' );
        }
        if($backwardintime->have_posts) { while($backwardintime->have_posts()) { $backwardintime->the_post();
            $backwardintime_id = $post->ID; $backwardintime_date = get_the_date( 'Y/m/d g:i:s A' );
        }

        // do some complicated logical comparisons
        if($fowardintime_id && !$backwardintime_id) {
            return $fowardintime_id;
        } elseif ($backwardintime_id && !$fowardintime_id) {
            return $backwardintime_id;
        } else {
            $foward = strtotime($fowardintime_date) - strtotime('-' . $daysago . ' days');
            $backward = strtotime('-' . $daysago . ' days') - strtotime($backwardintime_date);

            if ($foward < $backward) {
                return $fowardintime_id;
            } else {
                return $backwardintime_id;
            }
        }
    }
}
?>

Oh, and here is the usage. Say you wanted to post a link to the post from a year ago.

<?php $post_id = wpse38126_postfromlongago(365); ?>
<a href="https://wordpress.stackexchange.com/questions/38126/<?php echo get_permalink( $post_id ); ?>">My link to a post or page</a>

Anyone is free to help improve it.