Hi Sigurd,
Thanks for the detailed questions! Taking them in order:
1. Is this intended?
Partly. The timezone on the schedule trigger does more than control when the schedule fires. It’s also the timezone the flow runs in. Built-in features use it: Now, value processors (e.g. Hour, Start of day) and conditions give you Oslo time.
The exception is the function editor. In Flows, the Moment.js library isn’t given the flow’s timezone yet, so moment() inside a function works in UTC. That’s a bug on our side and we’re logging it. In Services this already works.
Also note that datetime values themselves are always stored as UTC ISO strings, like 2026-09-22T08:10:00.000Z. So if you log a raw datetime, it will always look like UTC, even when the flow runs in Oslo time.
Could you tell us where you saw UTC: inside a function, or in a raw datetime value?
2. Converting to local time in the function editor
Until the fix is out, convert explicitly to Europe/Oslo. That handles summer and winter time automatically. Add the Moment.js library to the function and use .tz():
return moment(myDate).tz('Europe/Oslo').format('YYYY-MM-DD HH:mm')
// or, for example:
return moment(myDate).tz('Europe/Oslo').hour()
If you’d rather not use a library, plain JavaScript also works:
return new Date(myDate).toLocaleString('en-GB', { timeZone: 'Europe/Oslo' })
This returns a formatted string rather than a date, so it’s best for display or for reading parts like the hour. Please avoid the “Moment Timezone” library, which is deprecated.
3. Running the same flow from the app
You’re right: when the flow is run from an app, it uses the app’s timezone. If you convert explicitly to 'Europe/Oslo' as shown above, you get the same result whether the flow runs on the schedule or from the app. So you don’t need to detect how it was started.
Thanks for flagging this. I’ll post here when the fix is out.