PHP tarafından döndürülen bir JSON nesnesi bir tarih nesnesi içerebilir

5 Cevap php

Bir javascript date nesne içeren PHP bir JSON nesnesi oluşturmak için bir yolu var mı? json_encode otomatik olarak dönüştürmek mi PHP'nin DateTime Javascript adlı date?

5 Cevap

Sen bir tamsayı, JSON bir doğal desteklenen veri türü olan bir UNIX zaman damgası olarak tarih / zaman geçirmek olabilir. PHP DateTime sana o değeri verecek bir "getTimestamp ()" işlevi vardır.

JavaScript Date nesne geçerli JSON değil ve bir sürü insan ile JSON ayrıştırmak çünkü sadece vahşi görülen bir tam şişmiş eval().

Kolay, insan okunabilir alternatif Date.parse() tarafından desteklenen bir biçimde bir dize olarak tarih göndermek olacaktır.

JSON:

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

JavaScript:

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

Kaynak: http://json.org/ - geçerli bir JSON veri türleri listesi için sağdaki kutuya bakın.

Kısa cevap: hayır.

JSON sadece metin ve tüm değerler ya diziler, nesneler, sayılar, dizeler, boolean veya null. Bu durumda "nesne" temelde sadece bir PHP dizi - bu yöntemleri var olamaz. Elle Tarihler içine (dizeleri olacaktır) tarihleri ​​dönüştürmek gerekir.

JSON resmi tanımı http://www.json.org/ yer almaktadır

Sözdizimsel şeker ile düzenli ifade: Ben @ postfuturist cevap ile kabul ederken, bir alternatif var.

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

Üretecektir Hangi:

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

veya

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

JSON veri JavaScript işlenecek olsaydı.

This would cover most of the use cases (note that UNIX timestamp is not necessarily 10 characters long). If used in production, mveyae syntactic sugar should be used to prevent accidental replacement of the value.

JSON yerine XHR'de, örneğin yoluyla daha sayfa yükleme süresi enjekte edildiğinde bu sadece kullanılmalıdır

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

Tabii! Kullanın:

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

EDIT: kod örneği ekleyin.

İşte benim kod ve ÇALIŞIR.

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

EDIT 2: daha JSON gibi olun.

İşte benim PHP kodu.

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

Bu şu HTML kodunu oluşturmak:

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

Çalıştırdığınızda, bunu gösterir:

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

(Bunun içinde değişken kullanmadan) literal JavaScript nesne gibi bakmak, bir dize geçebilir, dize bir nesneye bırakılmasına eval olabilir. Bu JSON olarak kullanmak anlamına gelir.

Umarım bu yardımcı olur.