Jak sformatować datę Microsoft JSON?

Biorę swój pierwszy crack w Ajax z jQuery. Dostaję swoje dane na moją stronę, ale mam pewne problemy z danymi JSON, które są zwracane dla typów danych daty. W zasadzie odzyskuję ciąg, który wygląda tak:

/Date(1224043200000)/

Od kogoś zupełnie nowego do JSON-Jak sformatować to do krótkiego formatu daty? Czy powinno to być obsługiwane gdzieś w kodzie jQuery? Wypróbowałem wtyczkę jQuery.UI.datepicker używając $.datepicker.formatDate() bez powodzenia.

FYI: oto rozwiązanie, które przyszedłem up z wykorzystaniem kombinacji odpowiedzi tutaj:

function getMismatch(id) {
  $.getJSON("Main.aspx?Callback=GetMismatch",
    { MismatchId: id },

    function (result) {
      $("#AuthMerchId").text(result.AuthorizationMerchantId);
      $("#SttlMerchId").text(result.SettlementMerchantId);
      $("#CreateDate").text(formatJSONDate(Date(result.AppendDts)));
      $("#ExpireDate").text(formatJSONDate(Date(result.ExpiresDts)));
      $("#LastUpdate").text(formatJSONDate(Date(result.LastUpdateDts)));
      $("#LastUpdatedBy").text(result.LastUpdateNt);
      $("#ProcessIn").text(result.ProcessIn);
    }
  );

  return false;
}

function formatJSONDate(jsonDate) {
  var newDate = dateFormat(jsonDate, "mm/dd/yyyy");
  return newDate;
}

To rozwiązanie pobrało mój obiekt z metody callback i poprawnie wyświetliło daty na stronie za pomocą biblioteki formatów dat.

Author: Peter Mortensen, 2008-10-16

30 answers

Ocena nie jest konieczna. To będzie działać dobrze:

var date = new Date(parseInt(jsonDate.substr(6)));

Funkcja substr usuwa część "/ Date ( ", a funkcja parseInt pobiera liczbę całkowitą i ignoruje") / " na końcu. Otrzymana liczba jest przekazywana do konstruktora daty.

EDIT: celowo pominąłem radix (drugi argument do analizy); zobacz mój komentarz poniżej . Poza tym całkowicie się Zgadzam z komentarzem Rory ' ego : daty ISO-8601 są preferowane niż ten stary format -- więc ten format generalnie nie powinien być używany do nowych prac rozwojowych. 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
 1590
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:02:59

Możesz użyć tego, aby uzyskać datę z JSON:

var date = eval(jsonDate.replace(/\/Date\((\d+)\)\//gi, "new Date($1)"));

A następnie możesz użyć skryptu JavaScript Date Format (1,2 KB, gdy minified i gzipped), aby wyświetlić go jak chcesz.

 117
Author: Panos,
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-11-09 10:16:37

Dla osób korzystających z Newtonsoft Json.NET, przeczytaj Jak to zrobić poprzez natywny JSON w IE8, Firefox 3.5 plus Json.NET.

Również dokumentacja dotycząca zmiany formatu dat pisanych przez Json.NET jest przydatna: serializacja dat z Json.NET

Dla tych, którzy są zbyt leniwi, oto szybkie kroki. Ponieważ JSON ma luźną implementację DateTime, musisz użyć IsoDateTimeConverter(). Zauważ, że od Json.NET 4.5 domyślnym formatem daty jest ISO, więc poniższy kod nie jest potrzebny.
string jsonText = JsonConvert.SerializeObject(p, new IsoDateTimeConverter());

JSON przejdzie jako

"fieldName": "2009-04-12T20:44:55"

Wreszcie, niektóre JavaScript, aby przekonwertować datę ISO do daty JavaScript:

function isoDateReviver(value) {
  if (typeof value === 'string') {
    var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)(?:([\+-])(\d{2})\:(\d{2}))?Z?$/.exec(value);
      if (a) {
        var utcMilliseconds = Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6]);
        return new Date(utcMilliseconds);
      }
  }
  return value;
}

Użyłem go tak

$("<span />").text(isoDateReviver(item.fieldName).toLocaleString()).appendTo("#" + divName);
 86
Author: Jason Jong,
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-08-01 23:23:11

Oryginalny przykład:

/Date(1224043200000)/  

Nie odzwierciedla formatowania używanego przez WCF podczas wysyłania dat przez WCF REST przy użyciu wbudowanej serializacji JSON. (przynajmniej na. Net 3.5, SP1)

Znalazłem tutaj pomocną odpowiedź, ale wymagana jest niewielka edycja regex, ponieważ wydaje się, że przesunięcie strefy czasowej GMT jest dodawane do liczby zwracanej (od 1970 roku) w WCF JSON.

W usłudze WCF mam:

[OperationContract]
[WebInvoke(
    RequestFormat = WebMessageFormat.Json,
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.WrappedRequest
    )]
ApptVisitLinkInfo GetCurrentLinkInfo( int appointmentsId );

Apptvisitlinkinfo jest zdefiniowane po prostu:

public class ApptVisitLinkInfo {
    string Field1 { get; set; }
    DateTime Field2 { get; set; }
    ...
}

Gdy" Field2 " jest zwracane jako Json z usługi, wartość wynosi:

/Date(1224043200000-0600)/

Zwróć uwagę na przesunięcie strefy czasowej zawarte jako część wartości.

Zmodyfikowany regex:

/\/Date\((.*?)\)\//gi
Jest nieco chętniejszy i chwyta wszystko pomiędzy parenami, nie tylko pierwszą liczbę. Uzyskany czas sinze 1970, Plus przesunięcie strefy czasowej mogą być wprowadzone do evalu, aby uzyskać obiekt daty.

Wynikowa linia JavaScript dla replace to:

replace(/\/Date\((.*?)\)\//gi, "new Date($1)");
 57
Author: Aaron,
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-12-30 01:21:28

Nie powtarzaj się - automatyzuj konwersję daty za pomocą $.parseJSON()

Odpowiedzi na twój post zapewniają ręczną konwersję daty Na daty JavaScript. Rozszerzyłem jQuery $.parseJSON() tylko trochę, więc jest w stanie automatycznie parsować daty, gdy go polecisz. Procesy It ASP.NET formatowane daty (/Date(12348721342)/) oraz daty sformatowane ISO (2010-01-01T12.34.56.789Z), które są obsługiwane przez natywne funkcje JSON w przeglądarkach (i bibliotekach takich jak json2.js).

W każdym razie. Jeśli nie chcesz powtarzać daty kod konwersji w kółko proponuję przeczytać ten post na blogu i zdobyć kod, który ułatwi Ci życie.
 55
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
2014-11-09 10:25:31

Jeśli powiesz w JavaScript,

var thedate = new Date(1224043200000);
alert(thedate);

Zobaczysz, że jest to prawidłowa data i możesz jej użyć w dowolnym miejscu w kodzie JavaScript z dowolnym frameworkiem.

 52
Author: John Boker,
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-05-16 13:55:45

Kliknij tutaj, aby sprawdzić Demo

JavaScript / jQuery

var = MyDate_String_Value = "/Date(1224043200000)/"
var value = new Date
            (
                 parseInt(MyDate_String_Value.replace(/(^.*\()|([+-].*$)/g, ''))
            );
var dat = value.getMonth() +
                         1 +
                       "/" +
           value.getDate() +
                       "/" +
       value.getFullYear();

Wynik - "10/15/2008"

 49
Author: 6 revs, 2 users 82%user2007801,
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-11-09 11:01:26

Zaktualizowano

Mamy wewnętrzną bibliotekę interfejsu użytkownika, która musi poradzić sobie zarówno z Microsoft ASP.NET wbudowany format JSON, jak /Date(msecs)/, pytany o tutaj pierwotnie, a większość formatu daty JSON, w tym JSON.NET ' s, jak 2014-06-22T00:00:00.0. Ponadto musimy poradzić sobie z niezdolnością starego do radzenia sobie z czymkolwiek poza 3 miejscami po przecinku.

Najpierw wykrywamy, jaką datę konsumujemy, analizujemy ją do normalnego obiektu JavaScript Date, a następnie formatujemy ją.

1) Wykryj Microsoft Date format

// Handling of Microsoft AJAX Dates, formatted like '/Date(01238329348239)/'
function looksLikeMSDate(s) {
    return /^\/Date\(/.test(s);
}

2) Wykryj format daty ISO

var isoDateRegex = /^(\d\d\d\d)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(\.\d\d?\d?)?([\+-]\d\d:\d\d|Z)?$/;

function looksLikeIsoDate(s) {
    return isoDateRegex.test(s);
}

3) Parse MS Date format:

function parseMSDate(s) {
    // Jump forward past the /Date(, parseInt handles the rest
    return new Date(parseInt(s.substr(6)));
}

4) Parse ISO date format.

Mamy przynajmniej sposób, aby mieć pewność, że mamy do czynienia ze standardowymi datami ISO lub datami ISO zmodyfikowanymi tak, aby zawsze miały trzy milisekundy (patrz wyżej ), więc kod jest różny w zależności od środowiska.

4a) Parse standard ISO date format, radzić sobie ze starymi problemami:

function parseIsoDate(s) {
    var m = isoDateRegex.exec(s);

    // Is this UTC, offset, or undefined? Treat undefined as UTC.
    if (m.length == 7 ||                // Just the y-m-dTh:m:s, no ms, no tz offset - assume UTC
        (m.length > 7 && (
            !m[7] ||                    // Array came back length 9 with undefined for 7 and 8
            m[7].charAt(0) != '.' ||    // ms portion, no tz offset, or no ms portion, Z
            !m[8] ||                    // ms portion, no tz offset
            m[8] == 'Z'))) {            // ms portion and Z
        // JavaScript's weirdo date handling expects just the months to be 0-based, as in 0-11, not 1-12 - the rest are as you expect in dates.
        var d = new Date(Date.UTC(m[1], m[2]-1, m[3], m[4], m[5], m[6]));
    } else {
        // local
        var d = new Date(m[1], m[2]-1, m[3], m[4], m[5], m[6]);
    }

    return d;
}

4B) Parse Format ISO z ustalonymi trzema milisekundami miejsc dziesiętnych-znacznie łatwiejszy:

function parseIsoDate(s) {
    return new Date(s);
}

5) sformatuj go:

function hasTime(d) {
    return !!(d.getUTCHours() || d.getUTCMinutes() || d.getUTCSeconds());
}

function zeroFill(n) {
    if ((n + '').length == 1)
        return '0' + n;

    return n;
}

function formatDate(d) {
    if (hasTime(d)) {
        var s = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
        s += ' ' + d.getHours() + ':' + zeroFill(d.getMinutes()) + ':' + zeroFill(d.getSeconds());
    } else {
        var s = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
    }

    return s;
}

6) zwiąż wszystko razem:

function parseDate(s) {
    var d;
    if (looksLikeMSDate(s))
        d = parseMSDate(s);
    else if (looksLikeIsoDate(s))
        d = parseIsoDate(s);
    else
        return null;

    return formatDate(d);
}

Poniżej stara odpowiedź jest przydatna do wiązania tego formatowania daty z własnym parsowaniem jQuery JSON, aby uzyskać obiekty daty zamiast łańcuchów, lub jeśli nadal tkwisz w jQuery

Stara Odpowiedź

Jeśli używasz funkcji Ajax jQuery 1.4 z ASP.NET MVC, możesz zamienić wszystkie właściwości DateTime na Data obiektów z:

// Once
jQuery.parseJSON = function(d) {return eval('(' + d + ')');};

$.ajax({
    ...
    dataFilter: function(d) {
        return d.replace(/"\\\/(Date\(-?\d+\))\\\/"/g, 'new $1');
    },
    ...
});

W jQuery 1.5 można uniknąć nadpisywania metody parseJSON globalnie, używając opcji konwertery w wywołaniu Ajax.

Http://api.jquery.com/jQuery.ajax/

Niestety musisz przełączyć się na starszą trasę eval, aby uzyskać daty do parsowania globalnie na miejscu - w przeciwnym razie musisz przekonwertować je na podstawie bardziej indywidualnych przypadków po parsowaniu.

 31
Author: Chris Moschini,
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:34:53

Musiałem też szukać rozwiązania tego problemu i w końcu natrafiłem na moment.js, która jest ładną biblioteką, która może analizować ten format daty i wiele innych.

var d = moment(yourdatestring)
Oszczędziło mi to bólu głowy, więc pomyślałem, że podzielę się tym z Tobą. :)
Więcej informacji na ten temat można znaleźć tutaj: http://momentjs.com/
 21
Author: Venemo,
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-15 06:36:24

W końcu dodałem "znaki do wyrażenia regularnego Panos, aby pozbyć się tych generowanych przez serializer Microsoft podczas pisania obiektów do skryptu wbudowanego:

Więc jeśli masz właściwość w kodzie C# - za to coś w stylu

protected string JsonObject { get { return jsSerialiser.Serialize(_myObject); }}

A w Twoim aspx masz

<script type="text/javascript">
    var myObject = '<%= JsonObject %>';
</script>

Dostaniesz coś takiego

var myObject = '{"StartDate":"\/Date(1255131630400)\/"}';

Zwróć uwagę na podwójne cudzysłowy.

Aby uzyskać to w formie, która eval poprawnie deserializuje, I użyte:

myObject = myObject.replace(/"\/Date\((\d+)\)\/"/g, 'new Date($1)');

Używam Prototype i aby go użyć dodałem

String.prototype.evalJSONWithDates = function() {
    var jsonWithDates = this.replace(/"\/Date\((\d+)\)\/"/g, 'new Date($1)');
    return jsonWithDates.evalJSON(true);
}
 21
Author: Chris Woodward,
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-11-09 10:20:25

Nie ma wbudowanego typu daty w JSON . Wygląda to jak liczba sekund / milisekund z jakiejś epoki. Jeśli znasz epokę, możesz utworzyć datę, dodając odpowiednią ilość czasu.

 20
Author: johnstok,
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
2008-10-15 20:46:51

W jQuery 1.5, o ile masz json2.js aby pokryć starsze przeglądarki, możesz deserializować wszystkie daty pochodzące z Ajax w następujący sposób:

(function () {
    var DATE_START = "/Date(";
    var DATE_START_LENGTH = DATE_START.length;

    function isDateString(x) {
        return typeof x === "string" && x.startsWith(DATE_START);
    }

    function deserializeDateString(dateString) {
        var dateOffsetByLocalTime = new Date(parseInt(dateString.substr(DATE_START_LENGTH)));
        var utcDate = new Date(dateOffsetByLocalTime.getTime() - dateOffsetByLocalTime.getTimezoneOffset() * 60 * 1000);
        return utcDate;
    }

    function convertJSONDates(key, value) {
      if (isDateString(value)) {
        return deserializeDateString(value);
      }
      return value;
    }

    window.jQuery.ajaxSetup({
      converters: {
        "text json": function(data) {
          return window.JSON.parse(data, convertJSONDates);
        }
      }
    });
}());

Dodałem logikę, która zakłada, że wszystkie daty są wysyłane z serwera jako UTC (co powinieneś); konsument otrzymuje wtedy obiekt JavaScript Date, który ma odpowiednią wartość wskazów, aby to odzwierciedlić. Czyli wywołanie getUTCHours() itp. w dniu zwróci taką samą wartość jak na serwerze, a wywołanie getHours() zwróci wartość w lokalna Strefa czasowa użytkownika określona przez przeglądarkę.

Nie uwzględnia to formatu WCF z przesunięciami stref czasowych, chociaż byłoby to stosunkowo łatwe do dodania.

 19
Author: Domenic,
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-11-09 10:55:30

Nie przesadzaj. Tak jak robiliśmy przez dziesięciolecia, przesunięcie numeryczne od standardowej epoki 1 stycznia 1970 o północy GMT / UTC/&C w liczbie sekund (lub milisekund) od tej epoki. JavaScript to lubi, Java to lubi, C to lubi, a Internet to lubi.

 17
Author: Xepoch,
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-11-09 10:21:40

Korzystanie z jQuery UI datepicker - naprawdę ma sens tylko wtedy, gdy już włączasz jQuery UI:

$.datepicker.formatDate('MM d, yy', new Date(parseInt('/Date(1224043200000)/'.substr(6)))); 

Wyjście:

15 października 2008

 17
Author: dominic,
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-10-26 21:26:17

Każda z tych Odpowiedzi ma jedną wspólną cechę: wszystkie przechowują daty jako jedną wartość (zwykle łańcuch).

Inną opcją jest skorzystanie z nieodłącznej struktury JSON i reprezentowanie daty jako listy liczb:

{ "name":"Nick",
  "birthdate":[1968,6,9] }

Oczywiście musisz upewnić się, że oba końce rozmowy są zgodne co do formatu (Rok, Miesiąc, Dzień) i które pola mają być datami,... ale ma tę zaletę, że całkowicie unikamy problemu konwersji daty na ciąg znaków. To same liczby, żadnych zobowiązań. Ponadto użycie kolejności: Rok, Miesiąc, Dzień pozwala również na prawidłowe sortowanie według daty.

Myślę nieszablonowo -- Data JSON nie musi być przechowywana jako ciąg znaków.

Kolejną zaletą tego sposobu jest to, że możesz łatwo (i efektywnie) wybrać wszystkie rekordy dla danego roku lub miesiąca, wykorzystując sposób, w jaki CouchDB obsługuje zapytania dotyczące wartości tablicy.

 16
Author: Nick Perkins,
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-11-09 10:57:08

Posting in awesome thread:

var d = new Date(parseInt('/Date(1224043200000)/'.slice(6, -2)));
alert('' + (1 + d.getMonth()) + '/' + d.getDate() + '/' + d.getFullYear().toString().slice(-2));
 15
Author: Dan Beam,
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-09-26 11:20:11
var newDate = dateFormat(jsonDate, "mm/dd/yyyy"); 

Czy jest inna opcja bez użycia biblioteki jQuery?

 14
Author: blgnklc,
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-11-09 10:18:12

Aby dodać jeszcze jedno podejście tutaj, "podejście kleszczy", które WCF przyjmuje jest podatne na problemy z strefami czasowymi, jeśli nie jesteś bardzo ostrożny, jak opisano TUTAJ i w innych miejscach. Więc teraz używam formatu ISO 8601, który obsługuje zarówno. NET, jak i JavaScript, który obejmuje przesunięcia stref czasowych. Poniżej znajdują się szczegóły:

W WCF/. NET:

gdzie CreationDate jest systemem.DateTime; ToString ("o") używa formatu. NET w obie strony Specyfikacja generująca łańcuch daty zgodny z ISO 8601

new MyInfo {
    CreationDate = r.CreationDate.ToString("o"),
};

W JavaScript

zaraz po pobraniu JSON idę naprawić daty jako obiekty daty JavaSript używając konstruktora daty, który akceptuje ciąg daty ISO 8601...

$.getJSON(
    "MyRestService.svc/myinfo",
    function (data) {
        $.each(data.myinfos, function (r) {
            this.CreatedOn = new Date(this.CreationDate);
        });
        // Now each myinfo object in the myinfos collection has a CreatedOn field that is a real JavaScript date (with timezone intact).
       alert(data.myinfos[0].CreationDate.toLocaleString());
    }
)

Gdy masz datę JavaScript, możesz użyć wszystkich wygodnych i niezawodnych metod datowania, takich jak toDateString, toLocaleString , itd.

 14
Author: activescott,
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-11-09 10:58:48
var obj = eval('(' + "{Date: \/Date(1278903921551)\/}".replace(/\/Date\((\d+)\)\//gi, "new Date($1)") + ')');
var dateValue = obj["Date"];
 9
Author: 在路上,
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-07-01 09:08:10

Sprawdź datę ISO standard; coś w tym stylu:

yyyy.MM.ddThh:mm

Staje się 2008.11.20T22:18.

 8
Author: Thomas Hansen,
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-11-09 10:17:34

I get the date like this:

"/Date(1276290000000+0300)/"

W niektórych przykładach Data jest w nieco innych formatach:

"/Date(12762900000000300)/"
"Date(1276290000000-0300)"

Itd.

Więc wymyśliłem następujące wyrażenie regularne:

/\/+Date\(([\d+]+)\)\/+/

A końcowy kod to:

var myDate = new Date(parseInt(jsonWcfDate.replace(/\/+Date\(([\d+-]+)\)\/+/, '$1')));
Mam nadzieję, że to pomoże.

Update: Znalazłem ten link od Microsoftu: jak serializować daty z JSON?

Wygląda na to, że wszyscy tego szukamy.
 7
Author: Michael Vashchinsky,
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-10-03 07:34:40

To frustrujące. Moim rozwiązaniem było parsowanie "/ i / " z wartości Wygenerowanej Przez ASP.NET JavaScriptSerializer tak, że chociaż JSON może nie mieć dosłownej daty, to nadal jest interpretowany przez przeglądarkę jako Data, co jest tym, czego naprawdę chcę: {"myDate":Date(123456789)}

Custom JavaScriptConverter for DateTime?

Muszę podkreślić trafność komentarza Roya Tinkera. To nie jest legalny JSON. Jest to brudny, brudny hack na serwerze, aby usunąć problem, zanim stanie się problem z JavaScript. To zadusi parser JSON. Użyłem go do zejścia z ziemi, ale już tego nie używam. Jednak nadal uważam, że najlepszą odpowiedzią jest zmiana sposobu formatowania daty przez serwer, na przykład ISO, jak wspomniano w innym miejscu.
 7
Author: StarTrekRedneck,
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 10:31:37

Dodaj jQuery UI plugin na swojej stronie:

function DateFormate(dateConvert) {
    return $.datepicker.formatDate("dd/MM/yyyy", eval('new ' + dateConvert.slice(1, -1)));
};
 7
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
2014-11-09 10:59:22

Poniżej jest dość proste rozwiązanie do parsowania dat JSON. Użyj poniższych funkcji zgodnie z wymaganiami. Wystarczy przekazać datę w formacie JSON pobraną jako parametr do funkcji poniżej:

function JSONDate(dateStr) {
    var m, day;
    jsonDate = dateStr;
    var d = new Date(parseInt(jsonDate.substr(6)));
    m = d.getMonth() + 1;
    if (m < 10)
        m = '0' + m
    if (d.getDate() < 10)
        day = '0' + d.getDate()
    else
        day = d.getDate();
    return (m + '/' + day + '/' + d.getFullYear())
}

function JSONDateWithTime(dateStr) {
    jsonDate = dateStr;
    var d = new Date(parseInt(jsonDate.substr(6)));
    var m, day;
    m = d.getMonth() + 1;
    if (m < 10)
        m = '0' + m
    if (d.getDate() < 10)
        day = '0' + d.getDate()
    else
        day = d.getDate();
    var formattedDate = m + "/" + day + "/" + d.getFullYear();
    var hours = (d.getHours() < 10) ? "0" + d.getHours() : d.getHours();
    var minutes = (d.getMinutes() < 10) ? "0" + d.getMinutes() : d.getMinutes();
    var formattedTime = hours + ":" + minutes + ":" + d.getSeconds();
    formattedDate = formattedDate + " " + formattedTime;
    return formattedDate;
}
 7
Author: Umar Malik,
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-11-09 11:00:49

Ostatni post, ale dla tych, którzy przeszukali ten post.

Wyobraź sobie to:

    [Authorize(Roles = "Administrator")]
    [Authorize(Roles = "Director")]
    [Authorize(Roles = "Human Resources")]
    [HttpGet]
    public ActionResult GetUserData(string UserIdGuidKey)
    {
        if (UserIdGuidKey!= null)
        {
            var guidUserId = new Guid(UserIdGuidKey);
            var memuser = Membership.GetUser(guidUserId);
            var profileuser = Profile.GetUserProfile(memuser.UserName);
            var list = new {
                              UserName = memuser.UserName,
                              Email = memuser.Email ,
                              IsApproved = memuser.IsApproved.ToString() ,
                              IsLockedOut = memuser.IsLockedOut.ToString() ,
                              LastLockoutDate = memuser.LastLockoutDate.ToString() ,
                              CreationDate = memuser.CreationDate.ToString() ,
                              LastLoginDate = memuser.LastLoginDate.ToString() ,
                              LastActivityDate = memuser.LastActivityDate.ToString() ,
                              LastPasswordChangedDate = memuser.LastPasswordChangedDate.ToString() ,
                              IsOnline = memuser.IsOnline.ToString() ,
                              FirstName = profileuser.FirstName ,
                              LastName = profileuser.LastName ,
                              NickName = profileuser.NickName ,
                              BirthDate = profileuser.BirthDate.ToString() ,
            };
            return Json(list, JsonRequestBehavior.AllowGet);
        }
        return Redirect("Index");
    }

Jak widzisz, używam funkcji C# 3.0 do tworzenia generycznych "Auto". Jest trochę leniwy, ale podoba mi się i działa. Tylko uwaga: profil to niestandardowa klasa, którą stworzyłem dla mojego projektu aplikacji internetowej.

 6
Author: Ray Linder,
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-10-23 06:39:45

Rozwiązanie Mootools:

new Date(Date(result.AppendDts)).format('%x')

Wymaga mootools-więcej. Testowane przy użyciu mootools-1.2.3.1-więcej na Firefox 3.6.3 i IE 7.0.5730.13

 6
Author: Midhat,
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-09-21 12:18:50

Możesz również użyć biblioteki JavaScript moment.js , który przydaje się, gdy planujesz zajmować się różnymi miejscowymi formatami i wykonywać inne operacje o wartościach dat:

function getMismatch(id) {
    $.getJSON("Main.aspx?Callback=GetMismatch",
    { MismatchId: id },

    function (result) {
        $("#AuthMerchId").text(result.AuthorizationMerchantId);
        $("#SttlMerchId").text(result.SettlementMerchantId);
        $("#CreateDate").text(moment(result.AppendDts).format("L"));
        $("#ExpireDate").text(moment(result.ExpiresDts).format("L"));
        $("#LastUpdate").text(moment(result.LastUpdateDts).format("L"));
        $("#LastUpdatedBy").text(result.LastUpdateNt);
        $("#ProcessIn").text(result.ProcessIn);
    }
    );
    return false;
}

Konfiguracja lokalizacji jest tak prosta jak dodawanie plików konfiguracyjnych (dostajesz je w momentjs.com) do projektu i konfiguracji języka:

moment.lang('de');
 6
Author: martinoss,
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-11-09 11:04:43

Dla wszystkich, którzy używają Pythona po stronie serwera: datetime.datetime ().ctime () zwraca łańcuch, który jest natywnie parsowalny przez"new Date ()". Oznacza to, że jeśli utworzysz nowy datetime.instancja datetime (np. z datetime.datetime.teraz), łańcuch może być zawarty w łańcuchu JSON, a następnie ten łańcuch może być przekazany jako pierwszy argument do konstruktora Date. Nie znalazłem jeszcze żadnych WYJĄTKÓW, ale nie testowałem go zbyt rygorystycznie.

 5
Author: Kyle Alan Hale,
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-07-08 01:19:36

Co jeśli . NET powróci...

return DateTime.Now.ToString("u"); //"2013-09-17 15:18:53Z"

A następnie w JavaScript...

var x = new Date("2013-09-17 15:18:53Z");
 5
Author: Juan Carlos Puerto,
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-11-09 11:06:30

Może Ci też pomóc.

 function ToJavaScriptDate(value) { //To Parse Date from the Returned Parsed Date
        var pattern = /Date\(([^)]+)\)/;
        var results = pattern.exec(value);
        var dt = new Date(parseFloat(results[1]));
        return (dt.getMonth() + 1) + "/" + dt.getDate() + "/" + dt.getFullYear();
    }
 5
Author: Ravi Mehta,
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-02-02 11:57:13