now() is correct and uses the database server's date/time. If it's not storing correctly, then you've got something amuck with your database. If it's not displaying correctly, then you've likely got something amuck with your date formats.

You shouldn't have to duplicate a whole lot of code to create orders. Best to simply invoke the built-in orders class and use its methods to do the real work. Any other duplication of code that you do will just make more work for you to maintain and great headaches for the merchants using your code.