Instead of modifying the time, try formatting the datetime to use a particular timezone. Which one to pick may need to be dynamic if you have users in different timezones, you may need to save the user’s timezone for use later if the email is being sent from a scheduled workflow or API endpoint workflow.
Here’s another strange thing. When I use the time stamps to send a calendar invite. Google will recognize the event correctly (see the top of the image where it says “when” the time is 10am to 12pm) but when you look into the bottom event description 4 hours have been added to the start and finish time and it’s not an event from 2pm to 6pm
Internally, the time is stored in UTC timezone. It is then formatted to your local timezone from the browser whenever it is displayed, including the data editor.
The email also formats to a timezone, but as an email is sent by the server and the user could be anywhere, including multiple users in multiple timezones, it doesn’t pull the timezone from the browser like you are seeing everywhere else. UTC is default, and you can override that with the formatting option.
The timezone is showing as UTC, so this adjustment sounds correct. Do you have any formatting options on the start and end time at the bottom?
The parameters for your set up likely are:
From time = UTC (this is what Bubble sends)
To Time = Users timezone in ISO format
Format DateTime = Time to be converted in as yyyy-mm-dd"T"HH:MM:ss"Z" set with users current timezone.
Bring the datatype back in as “date” not “text”