2009-09-15 18 views
15

क्या PHP में JSON ऑब्जेक्ट बनाने का कोई तरीका है जिसमें जावास्क्रिप्ट date ऑब्जेक्ट है? json_encode स्वचालित रूप से PHP के DateTime को जावास्क्रिप्ट के date पर परिवर्तित करता है?क्या PHP द्वारा लौटाए गए JSON ऑब्जेक्ट में दिनांक वस्तु

उत्तर

9

आप दिनांक/समय को यूनिक्स टाइमस्टैम्प के रूप में पास कर सकते हैं जो एक पूर्णांक है, जो JSON में एक मूल रूप से समर्थित डेटा प्रकार है। PHP में डेटटाइम में "getTimestamp()" फ़ंक्शन है जो आपको वह मान देगा।

+4

और आप सभी टाइमज़ोन जानकारी खो देंगे। निश्चित रूप से एक बहुवचन समय-क्षेत्र ऐप में स्वीकार्य उत्तर नहीं है। –

1

संक्षिप्त उत्तर: नहीं।

JSON केवल टेक्स्ट है, और सभी मान या तो सरणी, ऑब्जेक्ट्स, संख्याएं, स्ट्रिंग्स, बूलियन या नल हैं। इस मामले में "ऑब्जेक्ट" मूल रूप से सिर्फ एक PHP सरणी है - इसमें विधियां नहीं हो सकती हैं। आपको दिनांकों में मैन्युअल रूप से तिथियां (जो स्ट्रिंग्स होंगी) को मैन्युअल रूप से परिवर्तित करने की आवश्यकता है।

JSON की औपचारिक परिभाषा जावास्क्रिप्ट Date वस्तु मान्य JSON नहीं है और केवल जंगली में देखा जाता है, क्योंकि बहुत से लोगों को एक पूर्ण विकसित eval() के साथ अपने JSON पार्स http://www.json.org/

13

पर है।

एक आसान, मानव-पठनीय विकल्प Date.parse() द्वारा समर्थित प्रारूप में स्ट्रिंग के रूप में तारीख को भेजना होगा।

आपका JSON:

{ 
    date: '<?php echo date("r", $myDate); ?>' 
} 

आपका जावास्क्रिप्ट:

var myDateObj = new Date(Date.parse(myJSON.date)); 

स्रोत: http://json.org/ - मान्य JSON डेटा प्रकार की एक सूची के लिए सही पर बॉक्स देखें।

+0

मुझे उम्मीद थी कि मैं किसी भी तरह 'json_encode' के माध्यम से स्वचालित कर सकता है के रूप में मैं एक बड़े साहचर्य सरणी जिसमें से केवल कुछ मान (' $ दिनांकों [मैं] [ "शुरू"] ') है तिथियां दी गई हैं। – Eric

-8

ज़रूर! उपयोग करें:

var JSONWithDate = { 
    "Date": new Date(<?php echo date("Y, ").(date(n) - 1).date(", j") ?>) 
}; 

संपादित करें: कोड उदाहरण जोड़ें।

यहां मेरा कोड है और यह काम करता है।

<html> 
<body> 
<script> 
var J = { "Date": new Date(<?php echo date("Y, ").(date("n") - 1).date(", j") ?>) } 
document.write(J["Date"]); 
</script> 
</body> 
</html> 

संपादित करें 2: इसे JSON की तरह बनाएं।

यहां मेरा PHP कोड है। चर का उपयोग किए बिना

Tue Sep 15 2009 00:00:00 GMT-0600 (CST) 

आप एक स्ट्रिंग है जावास्क्रिप्ट की तरह लग रहे पारित कर सकते हैं, तो शाब्दिक वस्तु (:

<html> 
<body> 
<script> 
function PrintJSONFromPHP(pJSONStr) { 
    var aJSONObj = eval('('+pJSONStr+')'); 
    document.write(aJSONObj["Date"]); 
} 

var aJSONStr = '{ "Date": new Date(2009, 8, 15) }'; 
PrintJSONFromPHP(aJSONStr); 
</script> 
</body> 
</html> 

जब रन, यह पता चलता है:

<html> 
<body> 
<script> 
<?php 
function GetJSONDate($FieldName = "Date") { 
    return "\"$FieldName\": new Date(".date("Y, ").(date("n") - 1).date(", j").")"; 
} 
?> 

function PrintJSONFromPHP(pJSONStr) { 
    var aJSONObj = eval('('+pJSONStr+')'); 
    document.write(aJSONObj["Date"]); 
} 

var aJSONStr = '{ <?php echo GetJSONDate($FieldName = "Date"); ?> }'; 
PrintJSONFromPHP(aJSONStr); 
</script> 
</body> 
</html> 

यह निम्न HTML कोड उत्पन्न इसके अंदर), स्ट्रिंग को ऑब्जेक्ट में बदलने के लिए eval किया जा सकता है। इसका मतलब है कि आप इसे JSON के रूप में उपयोग कर सकते हैं।

उम्मीद है कि इससे मदद मिलती है।

+2

आपका उदाहरण काम कर सकता है, लेकिन यह जावास्क्रिप्ट है और JSON नहीं है। –

+0

मेरे अज्ञानी के लिए खेद है लेकिन मैं यह देखने में असफल रहा कि "यह जावास्क्रिप्ट है और JSON नहीं" का अर्थ है। JSON एक प्रकार का जावास्क्रिप्ट ऑब्जेक्ट शाब्दिक है जो हलचल के रूप में eval के रूप में। मेरा संपादन देखें (मुझे एक कोड दिखाई देता है जो इसे जेएसओएन की तरह दिखता है) लेकिन विचार बिल्कुल वही है। – NawaMan

+1

http://json.org/ का संदर्भ लें, जहां आप पूर्ण विनिर्देश पा सकते हैं। सारांश से एक महत्वपूर्ण पंक्ति: "JSON एक टेक्स्ट प्रारूप है जो __completely भाषा स्वतंत्र__ है लेकिन सी, सी ++, सी #, जावा, _ जावास्क्रिप्ट_, पर्ल, पायथन, और भाषाओं सहित सी-परिवार के प्रोग्रामर से परिचित सम्मेलनों का उपयोग करता है। कई अन्य।" –

1

जबकि मैं @postfuturist उत्तर से सहमत हूं, वहां एक विकल्प है: वाक्य रचनात्मक चीनी के साथ नियमित अभिव्यक्ति।

$json_data = json_encode(['test' => '__' . $_SERVER['REQUEST_TIME']]); 

$json_data = preg_replace_callback('/"__([0-9]{10})"/u', function ($e) { 
    return 'new Date(' . ($e[1] * 1000) . ')'; 
}, $json_data); 

कौन सा होगा उत्पादन:

string(32) "{"test":new Date(1385820141000)}" 

या

Object {test: Sat Nov 30 2013 14:02:21 GMT+0000 (GMT)} 

अगर JSON डेटा था जावास्क्रिप्ट में नियंत्रित किया जा करने के लिए।

इसमें अधिकांश उपयोग मामलों को शामिल किया जाएगा (ध्यान दें कि यूनिक्स टाइमस्टैम्प आवश्यक रूप से 10 वर्ण लंबा नहीं है)। यदि उत्पादन में उपयोग किया जाता है, तो मूल्य के आकस्मिक प्रतिस्थापन को रोकने के लिए अधिक वाक्य रचनात्मक चीनी का उपयोग किया जाना चाहिए।

यह केवल तभी उपयोग किया जाना चाहिए जब JSON को XHR के माध्यम से पृष्ठ लोड समय पर इंजेक्शन दिया जाता है, उदा।

<html> 
<head> 
<script> 
var myData = <?=$json_data?>; 
</script> 
</head> 
<body> 
</body> 
</html> 
+0

यह वैध JSON नहीं होगा? हालांकि यह मान्य जावास्क्रिप्ट होगा। यदि मैं गलत हूं तो मुझे सही करों –

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