Send UTC timestamps with moment.js to ASP.NET Core controller

Viewed 2095

I have a database with measured values from devices that I want to display in a web frontend. First I send the list of devices to the frontend together with the IANA timezone specifier for each device.

I would like all timestamps to be exchanged as UTC. The user selects a time range in the frontend in device-local time. I use moment.js to convert these timestamps to UTC with the known timezone of the device like this:

var startTimestamp = new Date(2017, 7, 1); //some local timestamp (zero-based month!)

var m = moment.tz(startTimestamp, "Europe/Berlin");

var utc = moment.utc(m).format();

utc is now "2017-07-31T22:00:00Z" which seems to be correct given the 2 hours offset for Berlin in DST.

I send this utc timestamp to my ASP.NET Core backend. The controller looks like this:

[HttpGet]
public IEnumerable<TimestampedValue> GetValues(int id, DateTime startTimestamp)
{
...
}

The problem is that startTimestamp is 2017-08-01 00:00:00 when the controller is called and its Kind property is set to Local. I would have expected it to be the same UTC timestamp.

Any idea what I'm doing wrong? I think moment.js is doing its job correctly so this must be a problem on the server side. If I recall correctly, the deserialization is done by JSON.net but I don't understand why it does not respect the Z at the end of the time string.

1 Answers
Related