Some code from a side project using the events build out from Noel Tock.

Event Shortcode

<?
/* ------------------- THEME FORCE ---------------------- */
/*
 * EVENTS SHORTCODES (CUSTOM POST TYPE)
 * http://www.noeltock.com/web-design/wordpress/how-to-custom-post-types-for-events-pt-2/
 */
// 1) FULL EVENTS
//***********************************************************************************
function tf_events_full ( $atts ) {

// - define arguments -
extract(shortcode_atts(array(
    'limit' =&gt; '10', // # of events to show
    'description' =&gt; '150' // # of Chars to show in description
 ), $atts));

// ===== OUTPUT FUNCTION =====
ob_start();

// ===== LOOP: FULL EVENTS SECTION =====
// - hide events that are older than 6am today (because some parties go past your bedtime) -
$today6am = strtotime('today 6:00') + ( get_option( 'gmt_offset' ) * 3600 );

// - query -
global $wpdb;
$querystr = "SELECT *
    FROM $wpdb-&gt;posts wposts, $wpdb-&gt;postmeta metastart, $wpdb-&gt;postmeta metaend
    WHERE (wposts.ID = metastart.post_id AND wposts.ID = metaend.post_id)
    AND (metaend.meta_key = 'tf_events_enddate' AND metaend.meta_value &gt; $today6am )
    AND metastart.meta_key = 'tf_events_enddate'
    AND wposts.post_type = 'tf_events'
    AND wposts.post_status = 'publish'
    ORDER BY metastart.meta_value ASC LIMIT $limit";

$events = $wpdb-&gt;get_results($querystr, OBJECT);

// - declare fresh day -
$daycheck = null;
// - loop -
if ($events):
global $post;
foreach ($events as $post):
setup_postdata($post);

// - custom variables -
$custom = get_post_custom(get_the_ID());
$sd = $custom["tf_events_startdate"][0];
$ed = $custom["tf_events_enddate"][0];
?>

<div class="full-events">
  <?php
  // - determine if it&#039;s a new day -
  $longdate = date("l, F j, Y", $sd);
  
  if ($daycheck == null) { echo &#039;<br />
  	<h3 class="title">' . $longdate . '</h3>'; 
  } 
  if ($daycheck != $longdate && $daycheck != null) { 
  	echo '<h3 class="title">' . $longdate . '</h3>'; } // - local time format - $time_format = get_option('time_format'); $stime = date($time_format, $sd); $etime = date($time_format, $ed); // - output - ?>
  
  <table>
    <tr>
      <td class="time">
      </td>
    </tr>
    <tr>
      <td>
      </td>
    </tr>
  </table>
</div>