This is what I do in my blog;
$query = "SELECT ID, Title, Category, Priority, Sticky, Author, More, Introtext,UCASE( DATE_FORMAT(Publish_Up,'%b %d, %Y %l:%i %p'))AS publishDate, Publish_Dwn, URLS
WHERE Category = 1 AND Publish_Up <= DATE_ADD(NOW(),INTERVAL 1 HOUR)
AND (Publish_Dwn > DATE_ADD(NOW(),INTERVAL 1 HOUR) OR Sticky=1)
AND Priority > 0
ORDER BY sticky DESC, priority ASC, id DESC LIMIT ".$show;
The Publish_Up date is the date you want it to appear, it can be now or in the future.
The Publish_Dwn Date is the 1st day of next month; i.e. 2011-02-01 00:00:00
I have other entries whose Publish_Dwn date are 2 days after an event. -- An event expired.
I have a column in the table to know when to take down the article. Most come down at the end of the month. If tagged sticky they stay up until un-stickied.