Microsoft JSON tarixini necə qurmaq olar?

Ajax-da jQuery-dən istifadə edərək ilk çatlamanı alıram. Mənim məlumatlarımı səhifəmə alıram, amma tarixi məlumat növləri üçün qaytarılmış JSON məlumatları ilə bağlı bəzi problemlər yaşayıram. Ümumiyyətlə, mən bu simvolu geri qaytarıram:

 /Date(1224043200000)/ 

JSON üçün tamamilə yeni birindən - Bu formatı qısa formata necə formatlaşdırıram? JQuery kodunda bir yerdə işlənməlidirmi? jQuery.UI.datepicker $.datepicker.formatDate() istifadə edərək heç bir uğur qazanmadı.

FYI: Burada gəldiyim həlli burada cavabların birləşməsini istifadə edir:

 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; } 

Bu həll mənim obyektimi geri çağırma üsulundan alıb düzgün formatda tarixi format kitabxanasını istifadə edərək səhifədə göstərmişdir.

1817
15 окт. Mark Struzinski tərəfindən 15 oktyabrda təyin olundu 2008-10-15 23:43 '08 at 11:43 pm 2008-10-15 23:43
@ 39 cavab
  • 1
  • 2

Eval tələb olunmur. Yaxşı işləyəcək:

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

Substr funksiyası "/ Date (" part "və" parseInt "funksiyası bir tamsayı alır və" "/ /" sayılır ") çıxarır. Nəticədə sayı tarixi qurucusuna ötürülür.

EDIT: Mən qəsdən əsas qaçırdım (ikinci arqument parseIntdir); Aşağıdakı şərhə bax . Əlavə olaraq Rory şərhiylə tamamilə razıyam: ISO-8601 tarixləri bu köhnə formata üstünlük verir, bu format normal olaraq yeni inkişaf üçün istifadə edilməməlidir. ISO-8601 formatından istifadə edərək tarixləri serializə edən böyük bir alternativ üçün Json.NET-in əla kitabxanasına baxın.

ISO-8601 biçimlendirilmiş JSON tarixləri üçün, simgeyi Tarix qurucusuna verin:

 var date = new Date(jsonDate); //no ugly parsing needed; full timezone support 
1587
23 февр. Roy Tinkerin 23 Fevralda verdiyi cavabı 2010-02-23 07:15 '10 saat 07:15 'da 2010-02-23 07:15

Tarixi JSON-dən almaq üçün bunu istifadə edə bilərsiniz:

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

Və sonra tarixi skript skript skriptindən (1.2 KB maddə və gzip zaman) istədiyiniz şəkildə göstərmək üçün istifadə edə bilərsiniz.

117
16 окт. Cavab 16 oktyabrda Panos verilir . 2008-10-16 00:14 '08 at 0:14 2008-10-16 00:14

Newtonsoft Json.NET istifadə edənlər üçün IE8, Firefox 3.5 plus Json.NET ilə Daxili JSON istifadə edərək bunu necə oxuyun.

Json.NET tərəfindən yazılmış tarixlərin formatının dəyişdirilməsi üçün sənədləşmə də faydalıdır: Json.NET istifadə edərək, tarixlərin seriyalanması

Çox tənbəl olanlar üçün burada sürətli addımlar var. JSON pulsuz DateTime tətbiqinə malik olduğundan, IsoDateTimeConverter() istifadə etmək lazımdır. Xahiş edirik unutmayın ki, Json.NET 4.5 standart tarix formatı İSOdur, buna görə aşağıdakı kodu tələb etmir.

 string jsonText = JsonConvert.SerializeObject(p, new IsoDateTimeConverter()); 

JSON keçəcək

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

Nəhayət, bəzi JavaScript JavaScript tarixini JavaScript tarixinə çevirmək üçün:

 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; } 

Mən bunu istifadə etdim

 $("<span />").text(isoDateReviver(item.fieldName).toLocaleString()).appendTo("#" + divName); 
86
19 янв. Jan 19-da Jason Jong'a cavab verin 2010-01-19 07:53 '10 at 7:53 2010-01-19 07:53

İlk nümunə:

 /Date(1224043200000)/ 

daxili JSON serializasiyası ilə WCF REST vasitəsilə tarix göndərərkən WCF tərəfindən istifadə olunan formatlamanı əks etdirmir. (ən azı. NET 3.5, SP1)

Cavabın faydalı olduğunu anladım, ancaq, GMT saat diliminin ofsetinin WCF JSON-da qaytarılmış sayına (1970-ci ildən) əlavə olduğu göründüyü üçün normal ifadələrdə bəzi redaktələri tələb edir.

WCF xidmətimdə:

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

ApptVisitLinkInfo sadəcə müəyyən edilir:

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

"Field2" xidmətdən Json olaraq qaytarıldığında bu dəyər:

 /Date(1224043200000-0600)/ 

Saat zonasının ofset dəyərinin bir hissəsi kimi daxil edildiyini unutmayın.

Modifikasiya edilmiş müntəzəm ifadə:

 /\/Date\((.*?)\)\//gi 

Bir az daha səbirsiz və parens arasındakı hər şeyi tutur, yalnız ilk sayı deyil. 1970-ci ildə əldə edilən sinze saatı, həm də vaxt zonası ofset, tarix obyektini almaq üçün qiymətləndirməyə köçürülə bilər.

Nəticədə dəyişən JavaScript sətri:

 replace(/\/Date\((.*?)\)\//gi, "new Date($1)"); 
57
30 дек. Cavab Aaron tərəfindən 30 dekabrda verilir. 2009-12-30 04:21 '10 saat 04:21 'da 2009-12-30 04:21

Özünüzü təkrar etməyin - $.parseJSON() ilə tarix dönüşümünü avtomatlaşdırın.

Mesajınıza cavablar, tarixləri javascript tarixlərinə əl ilə çevirir. $.parseJSON() bir az jQuery $.parseJSON() genişləndirdi ki, siz onu göstərişdə avtomatik olaraq tarixləri təhlil edə bilər. Bu brauzerlərdə quraşdırılmış JSON xüsusiyyətləri (və json2.js kimi kitabxanalar tərəfindən dəstəklənən ASP.NET formatlaşdırılmış tarixləri ( /Date(12348721342)/ ) və ISO tarixləri ( 2010-01-01T12.34.56.789Z ) işləyir ).

Hər halda. Tarixi dönüşüm kodunu bir daha təkrarlamaq istəmirsinizsə, mən bu blog yazısını oxumaq və həyatınızı bir az daha asanlaşdıracaq kodu almanızı təklif edirəm.

55
27 дек. Robert Koritnik tərəfindən verilmiş cavab 27 Dekabr. 2010-12-27 19:21 '11 at 19:21 2010-12-27 19:21

Javascript deyirsinizsə,

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

bunun düzgün bir tarix olduğunu görürsünüz və bu hər hansı bir javascript kodunuzda hər hansı bir çərçivə ilə istifadə edə bilərsiniz.

52
15 окт. 15 oktyabrda John Boker tərəfindən verilmiş cavab 2008-10-15 23:49 '08 at 11:49 2008-10-15 23:49

Demoyu kontrol etmək üçün buraya vurun.

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(); 

Nəticə "10/15/2008"

49
17 марта '13 в 20:41 2013-03-17 20:41 cavab user2007801 17 mart 'da 20:41' də verilir. 2013-03-17 20:41

yeniləndi

Microsoft ASP.NET üçün quraşdırılmış JSON formatına, məsələn /Date(msecs)//Date(msecs)/ burada və JSON.NET, o cümlədən JSON tarix formatlarının əksəriyyətinə uyğun olmalıdır ki, məsələn, 2014-06-22T00:00:00.0 . Bundan əlavə, biz köhnə İE-nin hər hansı bir şeylə qarşılaşa bilməməsi ilə başa düşməliyik .

Əvvəlcə istehlak etdiyimiz tarixləri müəyyənləşdirin, müntəzəm JavaScript Date obyektində təhlil edin və onu formatlayın.

1) Microsoft Tarix Biçimini təyin edin

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

2) ISO tarixini müəyyənləşdirin

 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) Sintaksis tarixi formatı:

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

4) ISO tarix formatını sökün.

Kodumuz ətraf mühitə bağlı olaraq fərqlənir, hər zaman üç milisaniyədə ( yuxarıya bax ) olan standart ISO tarixləri və ya ISO tarixləri ilə məşğul olduğumuza əmin olmaq üçün bir sıra üsulumuz var.

4a) ISO standart Tarix formatını silmək, oldIE məsələləri ilə mübarizə:

 function parseIsoDate(s) { var m = isoDateRegex.exec(s); // Is this UTC, offset, or undefined? Treat undefined as UTC. if (m.length == 7 || // Just the ym-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 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) ISO formatını üç milisaniyədə sabit əlamətlər ilə sökün - daha asan:

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

5) Formatlaşdırın:

 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) Hamısını birləşdirin:

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

Aşağıdakı köhnə cavab JQuery JSON ayrılmasına bu tarix formatının bağlanması üçün faydalıdır, beləliklə, siz strings əvəzinə tarix obyektlərini əldə edirsiniz və ya hələ də jQuery <1.5 ilə sıxılmış vəziyyətdədirsiniz.

Köhnə cavab

JQuery 1.4 Ajax funksiyasını ASP.NET MVC ilə istifadə edirsinizsə, bütün DateTime xüsusiyyətlərini istifadə edərək tarixi obyektlərə çevirə bilərsiniz:

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

JQuery 1.5-də, bir Ajax zəngində çeviricilərin seçimindən istifadə edərək, parseJSON metodunu dünya səviyyəsini ləğv edə bilərsiniz.

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

Təəssüf ki, tarixləri qlobal səviyyədə təhlil etməyə məcbur etmək üçün köhnə qiymətləndirmə marşrutuna keçməlisiniz - əks halda onları daha fərdi təhlili sonrasına çevirməliyik.

31
08 февр. Chris Moschini tərəfindən verilmiş cavab 08 fevral. 2011-02-08 02:56 '11 'də 2:56' də 2011-02-08 02:56

Mən Microsoft serializer tərəfindən obyektlərin yazılı skriptə yazılması üçün yaradılanlardan qurtarmaq üçün Panos müntəzəm ifadəsinə simvol əlavə etməklə sona çatdım:

Belə ki, C # kodu arxasında bir əmlakınız varsa, bir şey kimi

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

Və sizin aspx var

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

Siz kimi bir şey alacaqsınız

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

Əlavə cüt qiymətlərə diqqət yetirin.

Qiymətləndirmənin düzgün deserialize olacağına dair bir formada əldə etmək üçün mən istifadə etdim:

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

Prototipdən istifadə edirəm və bunun üçün istifadə edirəm

 String.prototype.evalJSONWithDates = function() { var jsonWithDates = this.replace(/"\/Date\((\d+)\)\/"/g, 'new Date($1)'); return jsonWithDates.evalJSON(true); } 
21
09 окт. Cavab 09 oktyabrda Chris Woodward tərəfindən verildi 2009-10-09 04:03 '09 at 4:03 'da 2009-10-09 04:03

Mən də bu problemin həllinə baxmalıyam və nəticədə bu tarix formatını və daha çox təhlil edə biləcək yaxşı bir kitabxana olan bir an.js rast gəldim.

 var d = moment(yourdatestring) 

Mənə bir baş ağrısı qurtardı, buna görə düşündüm ki, səninlə bölüşəcəyəm :)
Bu barədə daha ətraflı məlumatı burada tapa bilərsiniz: http://momentjs.com/

21
15 мая '13 в 9:36 2013-05-15 09:36 Cavab Venemo'nun 15 may tarixində saat 09 : 36-da verilir. 2013-05-15 09:36

JSON -da quraşdırılmış tarix növü yoxdur. Bu, müəyyən dövrdən bəri saniyə / millisaniyədəkdir. Əgər dövrünü bilirsinizsə, doğru vaxt miqdarı əlavə edərək bir tarix yarada bilərsiniz.

20
15 окт. johnstok 15 oct cavab verildi . 2008-10-15 23:46 '08 at 11:46 2008-10-15 23:46

JQuery 1.5-də, json2.js- də köhnə brauzerləri əhatə etsəniz, Ajax-dan gələn bütün tarixləri deserializə edə bilərsiniz, aşağıdakı kimi

 (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); } } }); }()); 

Bütün tarixləri serverdən UTC formatında (lazım olan) göndərdiyinizi qəbul edən məntiq daxil etmişəm; istehlakçının bundan sonra bunu əks etdirən müvafiq gənə dəyərinə malik javascript Date obyekti qəbul olunur. Yəni, getUTCHours() , və s. Gün serverdə olduğu kimi eyni dəyəri qaytaracaq və getHours() çağırışı brauzer tərəfindən təyin edilmiş istifadəçi yerli saat dilimindəki dəyəri qaytaracaq.

Bu, əlavə olaraq, nisbətən asan olmasına baxmayaraq, WCF formatını vaxt zonaları ilə nəzərə almır.

19
08 апр. Cavab Domenic 08 apr tərəfindən verilir . 2011-04-08 04:59 '11 at 4:59 2011-04-08 04:59

JQuery UI datepicker istifadə - siz artıq jQuery UI açmaq əgər, həqiqətən, mənada edir:

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

nəticə:

15 oktyabr 2008-ci il

17
30 авг. dominik tərəfindən verilmiş cavab 30 av. 2011-08-30 12:33 '11 'da 12:33' de 2011-08-30 12:33

Çox təəssüf etməyin. Onilliklər ərzində etdiyimiz kimi, rəqəmsal ofsetin 1 yanvar 1970-ci il tarixinin faktiki standart dövründən bu dövrdən saniyədə (və ya milisaniyədək) GMT / UTC / və gecə yarısına qədər ötürülürük. JavaScript kimi, Java belədir, C belədir və interneti sevir.

17
30 окт. Jé Queue tərəfindən verilmiş cavab 30 oktyabr 2009-10-30 07:45 '09 saat 07:45 'da 2009-10-30 07:45

Bu cavabların hər biri ortaq bir şeyə sahibdir: hamısı tarixləri bir dəyər (adətən simli) olaraq saxlayır.

Başqa bir seçim daxili JSON quruluşundan istifadə etmək və tarixləri nömrələrin siyahısı kimi təqdim etməkdir:

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

Əlbəttə ki, söhbətin hər iki tərəfi formata (ilin, aya, günə) və hansı sahələrə aid olduğuna əmin olmaq lazımdır ... lakin tarixin konvertasiya edilməsinə dair tarixdən tamamilə yayınmağın üstünlüyü var. Bütün nömrələr - heç bir xətt. Bundan əlavə, siparişi istifadə etməklə: il, ay, gün də tarixə düzgün olaraq sıralamanıza imkan verir.

Yalnız burada qutudan kənar düşünərək - JSON tarixi simli olaraq saxlanılmamalıdır.

Bunun üçün başqa bir bonus, ardıcıl dəyərlər ilə istəkləri işləyən CouchDB metodunu istifadə edərək asanlıqla (və səmərəli) müəyyən bir il və ya ay üçün bütün qeydləri seçə bilər.

16
17 июня '11 в 6:54 2011-06-17 06:54 Cavab Nick Perkins tərəfindən 17 İyun 2011 tarixində 6:54 2011-06-17 06:54 tarixində verilir

Əla mövzuya göndərilməsi:

 var d = new Date(parseInt('/Date(1224043200000)/'.slice(6, -2))); alert('' + (1 + d.getMonth()) + '/' + d.getDate() + '/' + d.getFullYear().toString().slice(-2)); 
15
26 сент. Cavab Dan Beam 26 sep verilir. 2010-09-26 14:20 '10 at 14:20 'da 2010-09-26 14:20

Farklı bir yaklaşım eklemek üçün, WCF'nin "zaman" bölgeleriyle ilgili sorunlara meyillidir "ticks" yaklaşımı, burada , məsələn, burada və başqa yerlerde çox diqqətli olmursanız. Buna görə də, indi, həm də .NET və JavaScript-ni dəstəkləyən ISO 8601 formatından istifadə edirəm. Aşağıdakı məlumatlar:

WCF / .NET-də:

CreationDate'in System.DateTime olduğu; ToString ("o") ISO 8601-ə uyğun tarix zolağını yaradan .NET dəyirmi səfər formatı göstəricisindən istifadə edir.

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

Javascriptdə

JSON'u çıxardıqdan dərhal sonra, tarixi qurucusu istifadə edərək, JavaScript tarixi obyektlərinin tarixlərini qurmağa başlayıram, bu da ISO 8601 tarix simli ...

 $.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()); } ) 

Bir JavaScript tarixi olduğunuzda, toDateString , toLocaleString və s. Kimi bütün rahat və etibarlı Tarix metodlarından istifadə edə bilərsiniz.

14
24 мая '12 в 22:01 2012-05-24 22:01 cənab Scott Willeke tərəfindən 24 May '12 'də saat 10:01 ' də cevap verilir 2012-05-24 22:01
 var newDate = dateFormat(jsonDate, "mm/dd/yyyy"); 

JQuery kitabxanasını istifadə etmədən başqa bir seçim varmı?

14
24 сент. Cavab Bilgin Kılıç 24 sep verilir. 2009-09-24 14:38 '09 at 14:38 'da 2009-09-24 14:38
 var obj = eval('(' + "{Date: \/Date(1278903921551)\/}".replace(/\/Date\((\d+)\)\//gi, "new Date($1)") + ')'); var dateValue = obj["Date"]; 
9
01 июля '11 в 11:07 2011-07-01 11:07 cavab 01 iyul 2011-ci il tarixində saat 11: 07-də ​​verilib

ISO standartının tarixini yoxlayın; kimi növ:

 yyyy.MM.ddThh:mm 

Bu, 2008.11.20T22:18 olur.

8
20 нояб. Thomas Hansen tərəfindən verilmiş cavab 20 noyabr 2008-11-20 12:18 '08 at 12:18 'da 2008-11-20 12:18

Bu tarixi aldım:

 "/Date(1276290000000+0300)/" 

Bəzi nümunələrdə tarix bir neçə müxtəlif formatdadir:

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

və digərləri

Beləliklə, aşağıdakı RegExp ilə tanış oldum:

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

və son kod:

 var myDate = new Date(parseInt(jsonWcfDate.replace(/\/+Date\(([\d+-]+)\)\/+/, '$1'))); 

Bu kömək edir.

Yeniləmə: Bu linki Microsoft -dan tapdum: JSON istifadə edərək tarixləri necə müəyyənləşdirmək olar?

Bu, aradığımız birinə bənzəyir.

7
26 сент. 26 Sentyabrda Michael Vashchinsky tərəfindən verilmiş cavab 2010-09-26 14:07 '10 at 14:07 2010-09-26 14:07

Bu sinir bozucu. Mənim həllim, ASP.NET JavaScriptSerializer tərəfindən yaradılan dəyərdən "/ və /" təhlil etmək idi, buna görə JSON bir tarixə aid ola bilməz, baxmayaraq ki brauzer hələ də tarix olaraq şərh olunur, amma bu mənim istədiyim şeydir : {"myDate":Date(123456789)}

Datetime üçün xüsusi JavaScriptConverter?

Roy Tinker tərəfindən şərhin dəqiqliyini vurğulamaq məcburiyyətindəyəm. Bu düzgün JSON deyil. Bu, javascript məsələsinə çevrilmədən əvvəl problemi aradan qaldırmaq üçün serverdə çirkin bir çirkli hackdir. JSON parserini boğacaq. Mən yerdən çıxmaq üçün istifadə etdim, amma artıq istifadə etmirəm. Ancaq hələ də ən yaxşı cavab, tarixlərin biçimlendirilmesini, məsələn, başqa yerlərdə göstərildiyi kimi, ISO-nı dəyişdirməkdir.

7
14 окт. StarTrekRedneck cavab 14 oktyabr. 2010-10-14 08:02 '10 at 8:02 2010-10-14 08:02

Aşağıda JSON tarixlərini təhlil etmək üçün kifayət qədər sadə bir həlldir. Sizin tələblərinizi yerinə yetirmək üçün aşağıdakı funksiyaları istifadə edin. Yalnız JSON formatını köçürməlisiniz. Tarixi aşağıdakı funksiyalar üçün parametr kimi seçildi:

 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
09 авг. Cavab Omar Malik 09 avqustda verilir. 2012-08-09 15:14 '12 at 3:14 pm 2012-08-09 15:14

Sayfanıza jQuery UI plugin əlavə edin:

 function DateFormate(dateConvert) { return $.datepicker.formatDate("dd/MM/yyyy", eval('new ' + dateConvert.slice(1, -1))); }; 
7
29 июня '12 в 15:01 2012-06-29 15:01 Cavab 29 iyun 'da saat 15 : 00-da Thulasiram tərəfindən verilir . 2012-06-29 15:01

Mootools həlli:

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

Mootools-daha çox tələb edir. Mootools-1.2.3.1-daha Firefox 3.6.3 və IE 7.0.5730.13-də istifadə edərək test edilmişdir

6
13 мая '10 в 11:02 2010-05-13 11:02 Cavab Mədət tərəfindən 13 may tarixində saat 11: 00-da verilir. 2010-05-13 11:02

Ayrıca, müxtəlif lokalize formatlarla məşğul olmaq və digər tarixi əməliyyatları yerinə yetirərkən faydalı olan javascript library.js istifadə edə bilərsiniz:

 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; } 

Lokalizasyonun ayarlanması, projenize konfigürasyon dosyalarını (momentjs.com adresinde buluyorsunuz) ve bir dil oluşturmak kadar kolaydır:

 moment.> 
6
15 мая '13 в 9:21 2013-05-15 09:21 Cavab martinoss tərəfindən 15 May 'da 9:21' də verilir 2013-05-15 09:21

Son post, ancaq bu yazı axtaranlar üçün.

Aşağıdakıları təsəvvür edin:

  [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"); } 

Gördüyünüz kimi "Auto" Generics yaratmaq üçün C # 3.0 funksiyasından istifadə edirəm. Bir az tənbəl, ancaq mən bunu sevirəm və işləyir. Yalnız bir qeyd: Profil mənim web proqramı üçün yaradılan xüsusi bir sinifdir.

6
23 окт. Cavab 23 oktyabrda Ray Linder tərəfindən verilir . 2009-10-23 09:39 '09 da 9:39 'da 2009-10-23 09:39

FYI, Python server tərəfində istifadə edən hər kəs üçün: datetime.datetime (). ctime () "yeni tarix ()" əsasında miras alınmış bir simli qaytarır. Yeni bir datetime.datetime örneği (məsələn, datetime.datetime.now ilə) yaratsanız, simli JSON dize daxil edilə bilər və sonra bu simli Tarix qurucusunun ilk arqumenti kimi qəbul edilə bilər. Hələ heç bir istisnalar tapmıram, amma mən də bunu ciddi şəkildə yoxlamadım.

5
08 июля '10 в 4:19 2010-07-08 04:19 Cavab Kyle Alan Hale tərəfindən 08.07.2010 04:19 da verilir

Nə əgər geri gəlirsə ...

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

Və sonra javascript ...

 var x = new Date("2013-09-17 15:18:53Z"); 
5
17 сент. 17 Sentyabrda Juan Carlos Puerto tərəfindən verilmiş cavab 2013-09-17 22:22 '13 saat 10:22 'da 2013-09-17 22:22

Bu da sizə kömək edə bilər.

  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
02 февр. Cavab Ravi Mehta tərəfindən verilir 02 fevral. 2016-02-02 14:57 '16 'da 14:57 2016-02-02 14:57
  • 1
  • 2

tags ilə bağlı digər suallar və ya bir sual