ASP.NET MVC JsonResult Date Format

Mam akcję kontrolera, która skutecznie zwraca JsonResult mojego modelu. Więc w mojej metodzie mam coś takiego:

return new JsonResult(myModel);
To działa dobrze, z wyjątkiem jednego problemu. W modelu istnieje właściwość date, która wydaje się zwracana w wyniku Json w następujący sposób:
"\/Date(1239018869048)\/"

Jak mam sobie radzić z datami, aby były zwracane w wymaganym przeze mnie formacie? Lub jak poradzić sobie z powyższym formatem w skrypcie?

Author: JustinStolle, 2009-04-07

22 answers

Żeby rozwinąć odpowiedź kacperone ' a .

Specyfikacja JSON nie uwzględnia wartości daty. MS musiał wykonać połączenie, a ścieżka, którą wybrali, polegała na wykorzystaniu małej sztuczki w reprezentacji łańcuchów javascript: literał Łańcuchowy "/" jest taki sam jak"\/", A literał Łańcuchowy nigdy nie zostanie serializowany do "\ / "(nawet " \ /"musi być mapowane do"\\/").

Zobacz http://msdn.microsoft.com/en-us/library/bb299886.aspx#intro_to_json_topic2 dla lepszego wyjaśnienia (przewiń w dół do "od literałów JavaScript do JSON")

Jednym z bolących punktów JSON jest brak daty / czasu. Wiele ludzie są zaskoczeni i rozczarowani aby dowiedzieć się tego, kiedy po raz pierwszy spotkanie z JSONEM. Proste wyjaśnienie (pocieszające czy nie) za brak literał daty/czasu jest taki, że JavaScript nigdy też nie miałem: wsparcia dla wartości daty i czasu w JavaScript to w całości dostarczone w terminie obiekt. Najbardziej aplikacje korzystające z JSON jako format danych, dlatego ogólnie zwykle używa się sznurka lub numer do wyrażenia daty i godziny wartości. Jeśli używany jest ciąg znaków, można generalnie spodziewaj się, że będzie w ISO Format 8601 W przypadku użycia liczby, zamiast tego, wtedy wartość jest zwykle przyjmuje się, że oznacza liczbę milisekundy w uniwersalnej koordynacji Czas (UTC) od epoki, gdzie Epoka jest / align = "right" / 1 stycznia 1970 (UTC). Znowu jest to zwykły konwencji i nie wchodzi w skład JSON standard. Jeśli wymieniasz dane z inną aplikacją, będziesz trzeba sprawdzić jego dokumentację, aby zobaczyć jak koduje wartości daty i czasu w dosłownym JSON. Na przykład, Microsoft ' s ASP.NET AJAX nie używa ani z opisanych konwencji. Raczej, koduje wartości. NET DateTime jako JSON string, gdzie zawartość string is /Date(ticks)/ and where kleszcze reprezentują milisekundy od Epoka (UTC). / / / 29 Listopada 1989, 4: 55: 30 AM, w UTC jest kodowane jako "\/Date (628318530718)\/"

Rozwiązaniem byłoby po prostu przetworzyć to:

value = new Date(parseInt(value.replace("/Date(", "").replace(")/",""), 10));

Słyszałem jednak, że gdzieś jest ustawienie, aby serializer wyświetlał DateTime obiekty ze składnią new Date(xxx). Spróbuję to wykopać.


Drugi parametr JSON.parse() akceptuje funkcję reviver, w której określa, w jaki sposób wartość została pierwotnie wytworzona przez, zanim zostanie zwrócona.

Oto przykład dla daty:

var parsed = JSON.parse(data, function(key, value) {
  if (typeof value === 'string') {
    var d = /\/Date\((\d*)\)\//.exec(value);
    return (d) ? new Date(+d[1]) : value;
  }
  return value;
});

Zobacz dokumenty JSON.parse()

 175
Author: JPot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:01

Oto moje rozwiązanie w Javascript - bardzo podobne do JPot, ale krótsze (i być może trochę szybsze):

value = new Date(parseInt(value.substr(6)));

"wartość.substr( 6) "usuwa część" /Date ( " , a funkcja parseInt ignoruje znaki inne niż number, które występują na końcu.

EDIT: celowo pominąłem radix (drugi argument do analizy); zobacz mój komentarz poniżej . Należy również pamiętać, że daty ISO-8601 są preferowane niż ten stary format - więc ten format generalnie nie powinien być używany dla nowego rozwoju. Zobacz doskonałe Json.NET biblioteka dla świetnej alternatywy, która serializuje daty przy użyciu formatu ISO-8601.

Dla dat JSON sformatowanych w ISO-8601 wystarczy przekazać łańcuch znaków do konstruktora daty:

var date = new Date(jsonDate); //no ugly parsing needed; full timezone support
 89
Author: Roy Tinker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:08

Istnieje sporo odpowiedzi na to po stronie klienta, ale możesz zmienić stronę serwera wyjściowego, jeśli chcesz.

Jest kilka sposobów, aby podejść do tego, zacznę od podstaw. Będziesz musiał podklasować klasę JsonResult i nadpisać metodę ExecuteResult. Stamtąd można podjąć kilka różnych podejść do zmiany serializacji.

Podejście 1: Domyślna implementacja używa JsonScriptSerializer. Jeśli spojrzysz na dokumentacja, można użyć metody RegisterConverters aby dodać własne JavaScriptConverters. Jest z tym jednak kilka problemów: JavaScriptConverter serializuje się do słownika, czyli zajmuje obiekt i serializuje się do słownika Json. Aby obiekt został serializowany do ciągu znaków, wymaga to trochę hackeringu, zobacz post. Ten konkretny hack będzie również uciec ciąg.

public class CustomJsonResult : JsonResult
{
    private const string _dateFormat = "yyyy-MM-dd HH:mm:ss";

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }

        HttpResponseBase response = context.HttpContext.Response;

        if (!String.IsNullOrEmpty(ContentType))
        {
            response.ContentType = ContentType;
        }
        else
        {
            response.ContentType = "application/json";
        }
        if (ContentEncoding != null)
        {
            response.ContentEncoding = ContentEncoding;
        }
        if (Data != null)
        {
            JavaScriptSerializer serializer = new JavaScriptSerializer();

            // Use your custom JavaScriptConverter subclass here.
            serializer.RegisterConverters(new JavascriptConverter[] { new CustomConverter });

            response.Write(serializer.Serialize(Data));
        }
    }
}

Podejście 2 (zalecane): Drugim podejściem jest zacznij od nadpisanego JsonResult i idź z innym serializerem JSON, w moim przypadku Json.NET serializer. To nie wymaga hakerstwa podejścia 1. Oto moja implementacja podklasy JsonResult:

public class CustomJsonResult : JsonResult
{
    private const string _dateFormat = "yyyy-MM-dd HH:mm:ss";

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }

        HttpResponseBase response = context.HttpContext.Response;

        if (!String.IsNullOrEmpty(ContentType))
        {
            response.ContentType = ContentType;
        }
        else
        {
            response.ContentType = "application/json";
        }
        if (ContentEncoding != null)
        {
            response.ContentEncoding = ContentEncoding;
        }
        if (Data != null)
        {
            // Using Json.NET serializer
            var isoConvert = new IsoDateTimeConverter();
            isoConvert.DateTimeFormat = _dateFormat;
            response.Write(JsonConvert.SerializeObject(Data, isoConvert));
        }
    }
}

Przykład Użycia:

[HttpGet]
public ActionResult Index() {
    return new CustomJsonResult { Data = new { users=db.Users.ToList(); } };
}

Dodatkowe kredyty: James Newton-King

 60
Author: Perishable Dave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-24 15:59:27

Moment.js jest rozbudowaną biblioteką datetime, która również to obsługuje. http://momentjs.com/docs/#/parsing/asp-net-json-dates/

Ex: moment("/Date(1198908717056-0700)/")

To może pomóc. wyjście plunkera

 28
Author: Eric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-29 07:21:48

Używanie jQuery do automatycznej konwersji dat z $.parseJSON

Uwaga: ta odpowiedź zapewnia rozszerzenie jQuery, które dodaje automatyczną obsługę formatu daty ISO i. Net.

Ponieważ używasz Asp.net MVC podejrzewam, że używasz jQuery po stronie klienta. Proponuję przeczytać ten post na blogu, który ma Kod jak używać $.parseJSON, aby automatycznie konwertować daty dla Ciebie.

Kod obsługuje Asp.net sformatowane daty, takie jak te, o których wspomniałeś, jak również jako daty sformatowane ISO. Wszystkie daty zostaną automatycznie sformatowane za pomocą $.parseJSON().

 19
Author: Robert Koritnik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-04 09:53:02

Stwierdziłem, że tworzenie nowego JsonResult i zwracanie tego jest niezadowalające - konieczność zamiany wszystkich wywołań na return Json(obj) na return new MyJsonResult { Data = obj } jest bólem.


Więc pomyślałem, dlaczego po prostu nie porwać JsonResult używając ActionFilter:

public class JsonNetFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Result is JsonResult == false)
        {
            return;
        }

        filterContext.Result = new JsonNetResult(
            (JsonResult)filterContext.Result);
    }

    private class JsonNetResult : JsonResult
    {
        public JsonNetResult(JsonResult jsonResult)
        {
            this.ContentEncoding = jsonResult.ContentEncoding;
            this.ContentType = jsonResult.ContentType;
            this.Data = jsonResult.Data;
            this.JsonRequestBehavior = jsonResult.JsonRequestBehavior;
            this.MaxJsonLength = jsonResult.MaxJsonLength;
            this.RecursionLimit = jsonResult.RecursionLimit;
        }

        public override void ExecuteResult(ControllerContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            var isMethodGet = string.Equals(
                context.HttpContext.Request.HttpMethod, 
                "GET", 
                StringComparison.OrdinalIgnoreCase);

            if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet
                && isMethodGet)
            {
                throw new InvalidOperationException(
                    "GET not allowed! Change JsonRequestBehavior to AllowGet.");
            }

            var response = context.HttpContext.Response;

            response.ContentType = string.IsNullOrEmpty(this.ContentType) 
                ? "application/json" 
                : this.ContentType;

            if (this.ContentEncoding != null)
            {
                response.ContentEncoding = this.ContentEncoding;
            }

            if (this.Data != null)
            {
                response.Write(JsonConvert.SerializeObject(this.Data));
            }
        }
    }
}

Można to zastosować do każdej metody zwracającej JsonResult do użycia JSON.Net zamiast:

[JsonNetFilter]
public ActionResult GetJson()
{
    return Json(new { hello = new Date(2015, 03, 09) }, JsonRequestBehavior.AllowGet)
}

Który odpowie

{"hello":"2015-03-09T00:00:00+00:00"}

Zgodnie z życzeniem!


Możesz, jeśli nie masz nic przeciwko wywołaniu is porównania na każde żądanie, dodać to do twojego FilterConfig:

// ...
filters.Add(new JsonNetFilterAttribute());

I wszystkie Twoje JSON będą teraz serializowane przez JSON.Net zamiast wbudowanego JavaScriptSerializer.

 13
Author: dav_i,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-18 11:49:35

Komunikacja Ajax między Klientem a serwerem często obejmuje dane w formacie JSON. Podczas gdy JSON działa dobrze dla ciągów, liczb i Booleanów może stwarzać pewne trudności dla dat ze względu na sposób ASP.NET serializuje je. Ponieważ nie ma specjalnej reprezentacji dla DAT, są one serializowane jako zwykłe ciągi. Jako rozwiązanie domyślny mechanizm serializacji ASP.NET Web Forms i MVC serializuje daty w specjalnym formularzu- / Date (ticks) / - gdzie ticks jest liczbą milisekund od 1 stycznia 1970 roku.

Ten problem można rozwiązać na dwa sposoby:

Strona klienta

Skonwertuje odebrany łańcuch daty na liczbę i wytworzy obiekt date używając konstruktora klasy date z wskazami jako parametrem.

function ToJavaScriptDate(value) {
  var pattern = /Date\(([^)]+)\)/;
  var results = pattern.exec(value);
  var dt = new Date(parseFloat(results[1]));
  return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();

}

Strona serwera

Poprzednie rozwiązanie wykorzystuje skrypt po stronie klienta do konwersji daty NA obiekt daty JavaScript. Możesz również użyć kodu po stronie serwera, który serializuje. NET DateTime wystąpienia w wybranym przez Ciebie formacie. Aby wykonać to zadanie, musisz utworzyć własne ActionResult, a następnie serializować dane tak, jak chcesz.

Odniesienie : http://www.developer.com/net/dealing-with-json-dates-in-asp.net-mvc.html

 11
Author: Mischa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-10 15:31:09

Miałem ten sam problem i zamiast zwracać rzeczywistą wartość daty użyłem ToString ("dd MMM yyyy") na nim. Następnie w moim javascript użyłem new Date (datevalue), gdzie datevalue może być "01 Jan 2009".

 7
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-11 17:44:01

Zobacz ten wątek:

Http://forums.asp.net/p/1038457/1441866.aspx#1441866

Zasadniczo, podczas gdy format Date() jest poprawny w javascript, nie jest poprawny w JSON(jest różnica). Jeśli chcesz stary format, prawdopodobnie będziesz musiał stworzyć fasadę i przekształcić wartość samodzielnie lub znaleźć sposób, aby uzyskać serializer dla swojego typu w JsonResult i poprosić go o użycie niestandardowego formatu dla dat.

 4
Author: casperOne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-07 15:47:58

Nie najbardziej elegancki sposób, ale to działało dla mnie:

var ms = date.substring(6, date.length - 2);
var newDate = formatDate(ms);


function formatDate(ms) {

    var date = new Date(parseInt(ms));
    var hour = date.getHours();
    var mins = date.getMinutes() + '';
    var time = "AM";

    // find time 
    if (hour >= 12) {
        time = "PM";
    }
    // fix hours format
    if (hour > 12) {
        hour -= 12;
    }
    else if (hour == 0) {
        hour = 12;
    }
    // fix minutes format
    if (mins.length == 1) {
        mins = "0" + mins;
    }
    // return formatted date time string
    return date.getMonth() + 1 + "/" + date.getDate() + "/" + date.getFullYear() + " " + hour + ":" + mins + " " + time;
}
 2
Author: Gabe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-11 20:50:49

Pracowałem nad rozwiązaniem tego problemu, ponieważ żadna z powyższych odpowiedzi nie pomogła mi naprawdę. Pracuję z tygodniowym kalendarzem jQuery i potrzebowałem, aby moje daty miały informacje o strefie czasowej na serwerze i lokalnie na stronie. Po trochę grzebania wokół, wymyśliłem rozwiązanie, które może pomóc innym.

Używam asp.net 3.5, vs 2008, asp.net MVC 2 i jQuery week calendar,

Po pierwsze, używam biblioteki napisanej przez Stevena Levithana, która pomaga w radzeniu sobie z z datami po stronie Klienta, Steven Levithan ' s date library . Format isoUtcDateTime jest idealny do tego, czego potrzebowałem. W moim wywołaniu jQuery AJAX używam funkcji formatowania dostarczonej z biblioteką w formacie isoUtcDateTime i gdy wywołanie ajax trafi w moją metodę akcji, rodzaj datetime jest ustawiony na lokalny i odzwierciedla czas serwera.

Kiedy wysyłam daty do mojej strony przez AJAX, wysyłam je jako ciągi tekstowe formatując daty za pomocą "DDD, dd MMM yyyy HH": "mm": "ss" GMT'zzzz". Ten format jest łatwo konwertowany po stronie klienta za pomocą

var myDate = new Date(myReceivedDate);

Oto moje kompletne rozwiązanie bez źródła Steve ' a Levithana, które możesz pobrać:

Kontroler:

public class HomeController : Controller
{
    public const string DATE_FORMAT = "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'zzzz";

    public ActionResult Index()
    {
        ViewData["Message"] = "Welcome to ASP.NET MVC!";

        return View();
    }

    public ActionResult About()
    {
        return View();
    }


    public JsonResult GetData()
    {
        DateTime myDate = DateTime.Now.ToLocalTime();

        return new JsonResult { Data = new { myDate = myDate.ToString(DATE_FORMAT) } };
    }

    public JsonResult ReceiveData(DateTime myDate)
    {
        return new JsonResult { Data = new { myDate = myDate.ToString(DATE_FORMAT) } };
    }
}

Javascript:

<script type="text/javascript">

function getData() {
    $.ajax({
        url: "/Home/GetData",
        type: "POST",
        cache: "false",
        dataType: "json",
        success: function(data) {
            alert(data.myDate);
            var newDate = cleanDate(data.myDate);
            alert(newDate);
            sendData(newDate);
        }
    });
} 

function cleanDate(d) {
    if (typeof d == 'string') {
        return new Date(d) || Date.parse(d) || new Date(parseInt(d));
    }
    if (typeof d == 'number') {
        return new Date(d);
    }
    return d;
}

function sendData(newDate) {
    $.ajax({
        url: "/Home/ReceiveData",
        type: "POST",
        cache: "false",
        dataType: "json",
        data:
        {
            myDate: newDate.format("isoUtcDateTime")
        },
        success: function(data) {
            alert(data.myDate);
            var newDate = cleanDate(data.myDate);
            alert(newDate);
        }
    });
}

// bind myButton click event to call getData
$(document).ready(function() {
    $('input#myButton').bind('click', getData);
});
</script>

Mam nadzieję, że ten szybki przykład pomoże innym w tej samej sytuacji, w której byłem. W tej chwili wydaje się działać bardzo dobrze z Serializacją Microsoft JSON i utrzymuje moje daty poprawne w różnych strefach czasowych.

 2
Author: Jesse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 14:59:51

Lepszym sposobem obsługi dat w knockoutjs jest użycie biblioteki moment i obsługa dat jak boss. Możesz łatwo poradzić sobie z datami takimi jak / Date(-62135578800000)/. Nie musisz się martwić o to, jak twoja data serialize w kontrolerze.

function jsonToDate(date,format) {
   return moment(date).format(format);
}

Użyj go jak

var formattedDate = jsonToDate(date,'MM/DD/YYYY')

Momentjs obsługuje wiele formatów dat i funkcji narzędziowych na datach.

 2
Author: Ajay Kelkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-06 14:15:30

Sformatuj datę w zapytaniu.

var _myModel = from _m in model.ModelSearch(word)
    select new { date = ((DateTime)_m.Date).ToShortDateString() };

Jedynym problemem z tym rozwiązaniem jest to, że nie otrzymasz żadnych wyników, jeśli którakolwiek z wartości daty jest null. Aby to obejść, możesz albo umieścić instrukcje warunkowe w zapytaniu, zanim wybierzesz datę, która ignoruje date null, albo możesz skonfigurować zapytanie, aby uzyskać wszystkie wyniki, a następnie zapętlić wszystkie te informacje za pomocą pętli foreach i przypisać wartość do wszystkich dat, które są null, zanim wykonasz SELECT new.

Przykład obu:

var _test = from _t in adc.ItemSearchTest(word)
                        where _t.Date != null
                        select new { date = ((DateTime)_t.Date).ToShortDateString() };

Druga opcja wymaga całkowicie innego zapytania, aby można było przypisać wartości do wszystkich null. To i pętla foreach musi być przed zapytaniem, które wybiera wartości.

var _testA = from _t in adc.ItemSearchTest(word)
                         select _i;

            foreach (var detail in _testA)
            {
                if (detail.Date== null)
                {
                    detail.Date= Convert.ToDateTime("1/1/0001");
                }
            }

Po prostu pomysł, który znalazłem łatwiejsze niż wszystkie przykłady javascript.

 1
Author: Chad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-05 06:03:08

Możesz użyć tej metody:

String.prototype.jsonToDate = function(){
    try{
        var date;
        eval(("date = new " + this).replace(/\//g,''));
        return date;
    } 
    catch(e){
        return new Date(0);
    }
};
 1
Author: eladmat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-09 19:53:48

Dodaj wtyczkę jquery ui na swojej stronie.

function JsonDateFormate(dateFormate, jsonDateTime) {
    return $.datepicker.formatDate(dateFormate, eval('new ' + jsonDateTime.slice(1, -1)));
};
 0
Author: Thulasiram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-29 12:08:37

Zwraca Format daty serwera. Musisz zdefiniować własną funkcję.

function jsonDateFormat(jsonDate) {

// Changed data format;
return (new Date(parseInt(jsonDate.substr(6)))).format("mm-dd-yyyy / h:MM tt");

};

 0
Author: Manish Kundu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-25 08:44:03

Oto kod JavaScript, który napisałem, który ustawia <input type="date"> wartość Z daty przekazanej z ASP.NET MVC.

    var setDate = function (id, d) {
    if (d !== undefined && d !== null) {
        var date = new Date(parseInt(d.replace("/Date(", "").replace(")/", ""), 10));
        var day = ('0' + date.getDate()).slice(-2);
        var month = ('0' + (date.getMonth() + 1)).slice(-2);
        var parsedDate = date.getFullYear() + "-" + (month) + "-" + (day);
        $(id).val(parsedDate);
    }
};

Wywołujesz tę funkcję w następujący sposób:

setDate('#productCommissionStartDate', data.commissionStartDate);

Gdzie commissionStartDate jest datą JSON przekazaną przez MVC.

 0
Author: Tribal Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-07 23:06:44

Nie na darmo, ale jest inny sposób. Najpierw skonstruuj swoje zapytanie LINQ. Następnie skonstruuj Zapytanie o wyliczony wynik i zastosuj dowolny rodzaj formatowania.

var query = from t in db.Table select new { t.DateField };
var result = from c in query.AsEnumerable() select new { c.DateField.toString("dd MMM yyy") };
Muszę powiedzieć, że dodatkowy krok jest irytujący, ale działa ładnie.
 0
Author: skrile,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-13 18:02:55

Zadziałało dla mnie stworzenie modelu widoku, który zawierał właściwość date jako łańcuch znaków. Przypisanie właściwości DateTime z modelu domeny i wywołanie .ToString () na właściwości date podczas przypisywania wartości do viewmodel.

Wynik JSON z metody działania MVC zwróci datę w formacie zgodnym z widokiem.

Model Widoku

public class TransactionsViewModel
{
    public string DateInitiated { get; set; }
    public string DateCompleted { get; set; }
}

Model Domeny

public class Transaction{
   public DateTime? DateInitiated {get; set;}
   public DateTime? DateCompleted {get; set;}
}

Metoda Działania Kontrolera

public JsonResult GetTransactions(){

var transactions = _transactionsRepository.All;
        var model = new List<TransactionsViewModel>();

        foreach (var transaction in transactions)
        {
            var item = new TransactionsViewModel
            {
                ...............
                DateInitiated = transaction.DateInitiated.ToString(),
                DateCompleted = transaction.DateCompleted.ToString(),
            };

            model.Add(item);
        }
        return Json(model, JsonRequestBehavior.AllowGet);
}
 0
Author: Oladipo Olasemo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-06 23:00:41

Zastąp Kontrolery Json/JsonResult, aby zwrócić JSON.Net:

To działa smakołyk

 0
Author: Ian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:05

Denerwujące, prawda ?

Moim rozwiązaniem była zmiana usługi WCF tak, aby zwracała dane w bardziej czytelnym (nie Microsoftowym) formacie. Zauważ poniżej, "UpdateDateOriginal", który jest domyślnym formatem dat WCF, oraz Mój " UpdateDate", który jest sformatowany do czegoś bardziej czytelnego.

Tutaj wpisz opis obrazka

Oto Jak to zrobić:

Zmiana formatu daty WCF

Mam nadzieję, że to pomoże.
 0
Author: Mike Gledhill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:46

Najprostszy:

Var milisegundos = parseInt(data.replace("/Date(", "").zastąp(")/", ""));
Var newDate = new Date (milisegundos). toLocaleDateString ("en-UE");

 -1
Author: Kenlly Acosta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-21 15:32:14