As noted elsewhere, this should likely take a (mandatory) block, and use yield and other protections to ensure the right semantics.  That should allow it to force saving the command data into the database (in the transaction wrapper), and thus delegating all timekeeping to the database, too.  save before yield, getting the DB timestame, then update to the NOW function after return from yield, and save again.