Index: django/contrib/admin/media/js/admin/DateTimeShortcuts.js
===================================================================
--- django/contrib/admin/media/js/admin/DateTimeShortcuts.js	(revision 2714)
+++ django/contrib/admin/media/js/admin/DateTimeShortcuts.js	(working copy)
@@ -52,16 +52,19 @@
         shortcuts_span.appendChild(document.createTextNode('\240|\240'));
         shortcuts_span.appendChild(clock_link);
 
-        // Create clock link div
+        // Create clock link div. Intervals are in 30 minutes, but may be adjusted by modifying values below
         //
         // Markup looks like:
         // <div id="clockbox1" class="clockbox module">
         //     <h2>Choose a time</h2>
         //     <ul class="timelist">
-        //         <li><a href="#">Now</a></li>
         //         <li><a href="#">Midnight</a></li>
-        //         <li><a href="#">6 a.m.</a></li>
+        //         <li><a href="#">12:30 AM</a></li>
+        //         <li><a href="#"><1:00 AM</a></li>
+        //         ...
         //         <li><a href="#">Noon</a></li>
+        //         <li><a href="#">12:30 PM</a></li>
+        //         ...
         //     </ul>
         //     <p class="calendar-cancel"><a href="#">Cancel</a></p>
         // </div>
@@ -77,13 +80,31 @@
         addEvent(clock_box, 'click', DateTimeShortcuts.cancelEventPropagation);
 
         quickElement('h2', clock_box, gettext('Choose a time'));
-        time_list = quickElement('ul', clock_box, '');
-        time_list.className = 'timelist';
-        quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().getHourMinute());")
-        quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '00:00');")
-        quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '06:00');")
-        quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '12:00');")
-
+        var interval_mins = 30; // minutes between displayed times
+        var columns = 4;        // number of columns in popup
+        var total_intervals = 24 * 60 / interval_mins;
+        var time = new Date(0,0,0,0,0,0,0);
+        var midnight = new Date(0,0,0,0,0,0,0);
+        var noon = new Date(0,0,0,12,0,0,0);
+        for (var si=0; si<columns; si++) {
+            time_list = quickElement('ul', clock_box, '');
+            time_list.className = 'timelist';
+            if (si == columns-1) {
+                time_list.id = 'timelist-end';
+            }
+            var this_col_count = total_intervals / columns;
+            for (var sj=0; sj<this_col_count; sj++) {
+                var time_text = null;
+                if (time.getTime() == midnight.getTime())
+                    time_text = gettext("Midnight");
+                else if (time.getTime() == noon.getTime())
+                    time_text = gettext("Noon");
+                else 
+                    time_text = time.toLocaleTimeString().replace(":00 ", ""); // its waaifer theen
+                quickElement("a", quickElement("li", time_list, ""), time_text, "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", '" + time.getHourMinute() + "');");
+                time = new Date(time.getTime() + (interval_mins * 60 * 1000)); // interval * seconds in a minute * millis in second
+            }
+        }
         cancel_p = quickElement('p', clock_box, '');
         cancel_p.className = 'calendar-cancel';
         quickElement('a', cancel_p, gettext('Cancel'), 'href', 'javascript:DateTimeShortcuts.dismissClock(' + num + ');');
