In cases like this I usually use UTC date representation (count of seconds/ms from 01.01.1970). On JavaScript side it could be get as
var utc = new Date().getTime() / 1000;
On server side it could be managed by following logic:
public static class DateTimeExtensions
{
static readonly DateTime _unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
static readonly double _maxUnixSeconds = (DateTime.MaxValue - _unixEpoch).TotalSeconds;
/// <summary>
/// Converts .NET <c>DateTime</c> to Unix timestamp used in JavaScript
/// </summary>
/// <param name="dateTime">DateTime to convert</param>
/// <returns>Unix timestamp in seconds</returns>
public static long ToUnixTimestamp(this DateTime dateTime)
{
return (long)(dateTime - _unixEpoch).TotalSeconds;
}
public static DateTime FromUnixTimestamp(long seconds)
{
return _unixEpoch.AddSeconds(seconds);
}
public static DateTime? FromUnixTimestamp(string seconds)
{
long secondsNo;
if(String.IsNullOrEmpty(seconds) || !long.TryParse(seconds, out secondsNo))
{
retun null;
}
return _unixEpoch.AddSeconds(secondsNo);
}
}
Using this loigc you could convert all dates to simple numbers on client and use DateTime? on server side to correctly work with empty dates
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "/GetProductionDay/{shiftDate}")]
public int GetProductionDay (string shiftDate)
{
DateTime? dt = DateTimeExtensions.FromUnixTimestamp(shiftDate);
....
return res;
}
Some more info: How to convert a Unix timestamp to DateTime and vice versa?