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?