Mam następujący fragment JSON:
\/Date(1293034567877)\/
co jest wynikiem tego kodu .NET:
var obj = DateTime.Now;
var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
serializer.Serialize(obj).Dump();
Teraz mam problem z tym, jak utworzyć obiekt Date z tego w JavaScript. Jedyne, co mogłem znaleźć, to niesamowite rozwiązanie regex (wiele zawierało błędy).
Trudno uwierzyć, że nie ma eleganckiego rozwiązania, bo to wszystko jest w JavaScripcie, mam na myśli kod JavaScript próbujący odczytać JSON (JavaScript Object Notation), który ma być kodem JavaScript iw tym momencie okazuje się, że nie jest to spowodowane tym, że JavaScript nie może zrób dobrą robotę tutaj.
Widziałem też kilka rozwiązań ewaluacyjnych, których nie mogłem wykonać (poza tym, że zostały wskazane jako zagrożenie bezpieczeństwa).
Czy naprawdę nie da się tego zrobić w elegancki sposób?
Podobne pytanie bez prawdziwej odpowiedzi:
jak analizować format daty ASP.NET JSON za pomocą GWT
źródło
new Date()
do niego.Odpowiedzi:
Nie ma standardowej reprezentacji dat w formacie JSON. Powinieneś zrobić to, co sugerował @jAndy i w ogóle nie serializować
DateTime
; po prostu wyślij ciąg daty RFC 1123ToString("r")
lub liczbę sekund od-epoki-systemu Unix, lub coś innego, czego możesz użyć w JavaScript do skonstruowania plikuDate
.źródło
JSON.parse
Funkcja przyjmuje opcjonalną funkcją DateTime reviver. Możesz użyć takiej funkcji:Wtedy zadzwoń
A twoje daty wyjdą dobrze.
źródło
Ta odpowiedź od Roya Tinkera tutaj :
Jak mówi: Funkcja substr pobiera część „/ Date (”), a funkcja parseInt pobiera liczbę całkowitą i ignoruje znak „) /” na końcu. Wynikowa liczba jest przekazywana do konstruktora Date.
Inną opcją jest prawidłowe sformatowanie informacji po stronie ASP, tak aby JavaScript mógł je łatwo odczytać. Rozważ zrobienie tego dla swoich dat:
Która powinna zwrócić taki format:
Jeśli przekażesz to do
Date
konstruktora JavaScript, takiego jak ten:Zmienna
date
ma teraz tę wartość:Oczywiście, możesz sformatować ten
DateTime
obiekt na dowolny ciąg / int, któryDate
akceptuje konstruktor JS .źródło
jeśli używasz daty ISO8601 w stylu JavaScript w JSON, możesz użyć tego z MDN
źródło
Możesz przekonwertować datę JSON na normalny format daty w JavaScript.
źródło
Co jest źle z:
To wraca dla mnie „środa, 22 grudnia 2010 16:16:07 GMT + 0000 (czas standardowy GMT)”.
Czy potrzebujesz wydobyć numer z json?
źródło
\/Date(1293034567877)\/
. Gdyby to było rozsądne, po prostu wyprowadziłoby czas epoki i można by za jego pomocą zainicjować obiekt Date.Wiem, że to bardzo stary wątek, ale chcę go opublikować, aby pomóc tym, którzy wpadną na to tak, jak ja.
jeśli nie zależy ci na używaniu skryptu innej firmy, możesz użyć momentu, js Następnie możesz użyć .format (), aby sformatować go do dowolnego celu.
źródło
Daktyle są zawsze koszmarem. Odpowiadając na twoje stare pytanie, być może jest to najbardziej elegancki sposób:
W eval konwertujemy nasz ciąg znaków na kod javascript. Następnie usuwamy „/”, a funkcja zamiany jest wyrażeniem regularnym. Gdy zaczniemy od nowego, nasze zdania wykona to:
Jedną rzeczą, której zacząłem używać dawno temu, są długie wartości, które są reprezentowane przez tiki ... dlaczego? cóż, lokalizacja i przestań się zastanawiać, jak jest skonfigurowana data na każdym serwerze lub każdym kliencie. W rzeczywistości używam go również w bazach danych.
Być może jest już dość późno na tę odpowiedź, ale może pomóc każdemu tutaj.
źródło
AngularJS również nie mógł przeanalizować
/Date(xxxxxxxxxxxxx)/
ciągu daty .NET JSON .Po stronie rozwiązałem ten problem, formatując datę do reprezentacji ciągu ISO 8601 zamiast bezpośrednio zrzucać
Date
obiekt ...Oto przykład kodu ASP.NET MVC.
Próbowałem,
RFC 1123
ale to nie działa. Angular traktuje to jako ciąg znaków zamiast Date.źródło
Nie używałem .Net do takich rzeczy. Jeśli udało ci się wydrukować coś podobnego do następującego, powinno działać.
Uwaga, chyba że analizujesz ten ciąg JSON w inny sposób lub oczekujesz tylko, że użytkownicy będą mieć nowoczesne przeglądarki z wbudowanym parserem JSON, musisz użyć struktury JS lub JSON2, aby przeanalizować ciąg JSON wyprowadzony przez serwer do prawdziwego JSON obiekt.
Link do Wiki
Link do pliku JSON2
Przykład na żywo
źródło
Odpowiedź na to pytanie brzmi: użyj nuget, aby uzyskać JSON.NET, a następnie użyj tego w swojej
JsonResult
metodzie:wewnątrz twojego widoku prosto zrób to w
javascript
:Jeśli jest to wywołanie AJAX:
Po
JSON.parse
wywołaniu możesz umieścić datę JSON wnew Date
instancji, ponieważJsonConvert
tworzy odpowiednią instancję czasu ISOźródło
źródło
Jak wspomniał Callum, dla mnie najlepszym sposobem jest zmiana metody Controller na string zamiast JsonResult ”.
Z metody Ajax możesz zrobić coś takiego
źródło
używanie funkcji eval działa tylko po to, aby usunąć ukośnik z przodu iz tyłu.
daje czwartek 01 stycznia 1970 00:00:00 GMT-0700 (amerykański czas górski standardowy)
źródło
Napotkałem problem z zewnętrznym API podającym daty w tym formacie, czasami nawet z informacjami o różnicy UTC, takimi jak
/Date(123232313131+1000)/
. Udało mi się obrócićDate
obiekt js za pomocą następującego koduźródło
źródło
// Użyj tej funkcji
źródło