2009-08-03 5 views
44

जब मैं किसी दिनांक समय को जेसन में पार्स करता हूं। नेट यह एक स्ट्रिंग देता है (यानी "\/Date(1249335194272)\/")। मैं इसे एक जेएस डेट ऑब्जेक्ट कन्स्ट्रक्टर को स्ट्रिंग में लपेटने कैसे नहीं दूं?asp.net में डेटटाइम का जावास्क्रिप्ट क्रमिकरण जावास्क्रिप्ट दिनांक ऑब्जेक्ट नहीं दे रहा है?

// js server code 
var dteNow = <%= jsonDateNow %>; 


// js rendered code 
var dteNow = "\/Date(1249335477787)\/"; 


// C# 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.Script.Serialization; 
using System.Web.UI.WebControls; 

namespace testing{ 
    public partial class iTaxPrep : System.Web.UI.Page 
    { 
     protected string jsonDateNow; 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!IsPostBack) 
      { 
       jsonDateNow = new JavaScriptSerializer().Serialize(DateTime.Now); 

      } 
     } 
    } 
} 

उत्तर

14

यह काम करने के लिए (विचार के लिए धन्यवाद क्रिस एस) लगता है। सी # में ऑब्जेक्ट ऑब्जेक्ट से स्ट्रिंग रैपर को निकालने के लिए एक प्रतिस्थापन करें;

using System.Collections.Generic; 
     using System.Linq; 
     using System.Web; 
     using System.Web.UI; 
     using System.Web.Script.Serialization; 
     using System.Web.Script.Services; 
     using System.Web.Services; 
     using System.Web.UI.WebControls; 

     namespace test 
     { 
      [ScriptService] 
      public partial class testing: System.Web.UI.Page 
      { 
       protected string strCaseID; 
       protected string jsonCase; 

       protected void Page_Load(object sender, EventArgs e) 
       { 
        if (!IsPostBack) 
        { 
         strCaseID =Tools.GetQueryObject("id"); 
         // get a complex object with dates, string, arrays etc. 
         jsonESHACase = new JavaScriptSerializer().Serialize(objCase.Get(strCaseID)) 
          .Replace("\"\\/Date(", "new Date(").Replace(")\\/\"", ")"); 
        } 
       } 
      } 
     } 

.. और उद्धरण हटाने और तिथि के लिए नया उपसर्ग जोड़ने के बाद यह जेएस अब काम करता है। हुर्रे!

testCase= <%= jsonESHACase %>; 
    if (testCase) { 
     document.write(testCase["ClosingDate"].format("MM dd yyyy")); 
    } 
+1

हैं, मैं जेएस में समस्या को ठीक करने वाले अन्य उत्तरों के लिए यह उत्तर पसंद करता हूं। समस्या .NET में है, इसलिए .NET IMO में हल किया जाना चाहिए। – Carl

0
jsonDateNow = String.Format("Date({0},{1},{2})", Date().Now.getYear(), Date().Now.getMonth() -1, Date().Now.getDay()); 
+0

वास्तव में समस्या यह है कि मुझे जेएसओएन में ऑब्जेक्ट्स को क्रमबद्ध करने की आवश्यकता है जिसमें तिथियां हों और उन तिथियों को क्लाइंट-साइड का उपयोग करें। –

-2

इस उदाहरण काम करता है

JavaScriptSerializer serializer = new JavaScriptSerializer(); 

    DateTime dt = DateTime.Now; 
    DateTime dt1 = dt; 

    string jsonDateNow = serializer.Serialize(dt1); 
+0

यह भी क्या कर रहा है? 'डेटटाइम डीटी 1 = डीटी' कुछ भी नहीं करता है। –

55

यह JSON के साथ एक known limitation है। This answer, आप मदद कर सकता है विशेष रूप से:

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

निश्चित रूप से सही उत्तर, अच्छी पोस्ट। –

+0

यह काफी है जो मैंने किया है लेकिन जब मैं कई तारीखों और अन्य जानकारी वाले एक बड़े ऑब्जेक्ट को पार्स करता हूं तो यह बदसूरत लग रहा है। –

+0

बदसूरत लग रहा है लेकिन कोई बेहतर तरीका नहीं है .. – RredCat

3
एक छोटे स्ट्रिंग परिवर्तन के साथ

और एक eval आप एक दिनांक वस्तु बना सकते हैं

var dteNow = "\/Date(1249335477787)\/"; 
var dteObj = eval("new " + dteNow.replace(/\//g,"")); 
+4

[eval बुरा है] (http://24ways.org/2005/dont-be-eval/) आदि आदि, लेकिन अन्यथा अच्छी तरह से किया। – ruffin

0

मैं पाया है कि इस इस समस्या से निपटने के लिए एक तकनीक यह है:

http://icanmakethiswork.blogspot.co.uk/2012/04/beg-steal-or-borrow-decent-javascript.html

यह डेटटाइम्स को आईएसओ 8601 डेट स्ट्रिंग्स के रूप में क्रमबद्ध करने की अनुमति देता है जिसका उपयोग जावास्क्रिप्ट डेट कन्स्ट्रक्टर के साथ किया जा सकता है और इसमें मानव पढ़ने का बोनस है योग्य।

+0

आपके कई उत्तरों में आपके ब्लॉग पोस्ट के लिंक से बहुत कम सामग्री शामिल है। किसी भी मौके पर आप उन्हें वास्तविक उत्तरों में लाने के लिए विस्तार कर सकते हैं? बाकी बहुत अच्छे लगते हैं और मुझे यकीन है कि ब्लॉग पोस्ट भी बेहतरीन जवाब देंगे। – Flexo

1

आप इस कोशिश कर सकते हैं:

"MyField: " + string.Format("(function(y,m,d,h,mm,s){{var d=new Date(Date.UTC(y,m-1,d,h,mm,s));return d;}})({0},{1},{2},{3},{4},{5})", d.Year, d.Month, d.Day, d.Hour, d.Minute, d.Second); 

यह एफएफ और IE में काम करने लगता है। इस तरह

7

सरल जावास्क्रिप्ट हेरफेर: कार्य करने के लिए परम के रूप में JSON तारीख में

function(param){ 
    var date = new Date(parseInt(param.substr(6))); 
    return date; 
} 

पास है और यह एक जावास्क्रिप्ट तारीख वापस आ जाएगी।

var lowerBound = new Date(Date.parse("@Model.LowerBound.ToString("MMMM dd, yyyy")")); 

आप समय की जरूरत है, निम्नलिखित पर विचार करें:

+0

यह उत्तर स्वीकार्य उत्तर से बेहतर क्यों है? –

+1

क्योंकि यह एक बहुत ही सरल उत्तर है जो भी सही है! ^ –

0

यहाँ Date.parse और DateTime.ToString का उपयोग कर एक विकल्प नहीं है। मेरा मानना ​​है कि यह एक नए जावास्क्रिप्ट कल्पना पर निर्भर करता है:

var lowerBound = new Date(Date.parse("@Model.LowerBound.ToUniversalTime().ToString("s")")); 

यहाँ jQuery का उपयोग कर एक विकल्प है:

var lowerBound = $.datepicker.parseDate('yy-mm-dd', "@Model.LowerBound.ToString("yyyy-MM-dd")"); 
0

हैं Json.NET या Newtonsoft.Json से उपयोग कर (मैं वहाँ समय यहाँ जोड़ने के लिए एक रास्ता है यकीन है) इस लिंक को देखें: Serializing Dates in JSON

0

थोड़ा सरल स्ट्रिंग RegEx के साथ साफ ...

var myDate = "\/Date (1508821200000) /";
var jsDate = नई तिथि (parseInt (myDate.replace (/ \ D/g, '')));

संबंधित मुद्दे