I’m uncertain as to what you’re trying to do. Are you saying that you want to do a new UL every time the_date changes? I really don’t see why you’d want to do that in this case, but hey, to each his own.
the_date has a unique property, as you may have noticed. It won’t print the same thing twice in a row. If you look at your recent posts for Sept. 19th, you’ll see that the September 19th only printed once for two posts, even though the_date was called twice (think about it).
You can use this property to your advantage here.
<ul>
<?php if (have_posts()) :
while (have_posts()) : the_post();
echo the_date('F j','</ul><ul><li>','</li>');
echo "<li><a href=\"";
echo the_permalink();
echo "\">";
echo the_title();
echo " by ";
echo the_author_posts_link();
echo "</li>";
endwhile;
endif; ?>
</ul>
This is a bit unpleasant, I grant you, since it leaves a useless <ul></ul>
at the top of the result. You could work around this by handling the changing date code yourself. For this, you’d need get_the_time(), like so:
<ul>
<?php if (have_posts()) :
$start_loop = true;
while (have_posts()) : the_post();
$curr_date = get_the_time('F j');
if (!$start_loop && $curr_date != $old_date) {
echo "</ul><ul>";
}
$start_loop = false;
$old_date = $curr_date;
echo the_date('F j','<li>','</li>');
echo "<li><a href=\"";
echo the_permalink();
echo "\">";
echo the_title();
echo " by ";
echo the_author_posts_link();
echo "</li>";
endwhile;
endif; ?>
</ul>
This one is slightly more complex. Basically, we ignore the first run through the loop using a boolean variable, then for the rest of the runs, if the date string changes, we close the UL and start a new one.