You didn't say what story format you're using in your tags, so I'm going to assume you're using SugarCube.
Here's a bunch of code showing how to use the JavaScript Date object in Twine with SugarCube:
<<nobr>>
<<set $CurDate = new Date('August 19, 1975 23:15:30')>>$CurDate<br>
add 15 min<br>
<<set $CurDate = new Date($CurDate.setMinutes($CurDate.getMinutes() + 15))>>$CurDate<br>
<<=$CurDate.toLocaleString("en-US", { weekday: "long", month: "short", day: "numeric", year: "numeric", hour: "numeric", minute: "2-digit" } )>><br>
add 1 day <<set $CurDate.setDate($CurDate.getDate() + 1)>><br>
<<=$CurDate.toLocaleString("en-US", { weekday: "long", month: "short", day: "numeric", year: "numeric", hour: "numeric", minute: "2-digit" } )>><br>
set time <<set $CurDate.setHours(14)>><<set $CurDate.setMinutes(15)>><<set $CurDate.setSeconds(0)>><br>
<<=$CurDate.toLocaleString("en-US", { weekday: "long", month: "short", day: "numeric", year: "numeric", hour: "numeric", minute: "2-digit" } )>><br>
<<set $CurDate = new Date('June 14, 2018 15:30')>>
Current date/time: <<print getDayName($CurDate)>>, $CurDate<br>
<<set $Appointment = clone($CurDate)>>
<<set $Appointment.setDate($Appointment.getDate() + 1)>>
<<set $Appointment.setHours(18)>>
<<set $Appointment.setMinutes(0)>>
<<set $Appointment.setSeconds(0)>>
Raw Appointment date/time: <<print getDayName($Appointment)>>, $Appointment<br>
<<set _timeOptions = { weekday: 'long', year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric' }>>
Formatted Appointment date/time: <<print $Appointment.toLocaleString("en-US", _timeOptions)>><br>
<</nobr>>
Take a look at the JavaScript documentation I linked to above to see other ways you can manipulate the time.