Value of property before binding is executed in perspective

That's not how coalesce works. dateFormat will never return a null, so coalesce won't do anything.
try this instead:

if (isNull({this.custom.datetime}),
  "loading...",
  dateFormat({this.custom.datetime}, 'dd-MM hh:mm')
)

I suggest you read this:

edit: that shift script looks funky to me. It seems dates are strings, but you're getting them from built-in features. There's something weird here.

edit again:
yep they're strings:
image
I'm not sure what it's supposed to represent, and there's no details in the docs