I don’t know why I haven’t shared this little helper before, but here it is.

(defun mu-date-at-point (date)
  "Insert current DATE at point via `completing-read'."
  (interactive
   (let* ((formats '("%Y%m%d" "%F" "%Y%m%d%H%M" "%Y-%m-%dT%T"))
          (vals (mapcar #'format-time-string formats))
          (opts
           (lambda (string pred action)
             (if (eq action 'metadata)
                 '(metadata (display-sort-function . identity))
               (complete-with-action action vals string pred)))))
     (list (completing-read "Insert date: " opts nil t))))
  (insert date))

What mu-date-at-point does is formatting the current date in four different ways with format-time-string and then offering them as options to completing-read.

The interesting part is how opts is built. It’s a nice trick to ensure its content is always sorted according to the order in formats. Without leveraging completion-metadata the completion system would take care of sorting the items for me.

For the record, I learned how to tweak completion-metadata on Emacs StackExchange. I suggest reading C-h f completing-read and C-h f completion-metadata to know more.