簡體   English   中英

PHP返回的JSON對象是否包含日期對象

[英]Can a JSON object returned by PHP contain a date object

有沒有辦法在PHP中創建包含javascript date對象的JSON對象? json_encode自動將PHP的DateTime轉換為Javascript的date嗎?

JavaScript Date對象不是有效的JSON,只能在野外看到,因為很多人用完整的eval()解析他們的JSON。

一個簡單的,人類可讀的替代方法是將日期作為字符串以Date.parse()支持的格式發送。

你的JSON:

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

你的JavaScript:

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

來源: http//json.org/ - 請參閱右側的框以獲取有效JSON數據類型的列表。

您可以將日期/時間作為UNIX時間戳傳遞,該時間戳是一個整數,是JSON中本機支持的數據類型。 PHP中的DateTime有一個“getTimestamp()”函數,它將為您提供該值。

簡答:不。

JSON只是文本,所有值都是數組,對象,數字,字符串,布爾值或null。 在這種情況下,“對象”基本上只是一個PHP數組 - 它不能有方法。 您需要手動將日期(將是字符串)轉換為日期。

JSON的正式定義見http://www.json.org/

雖然我同意@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)}

如果要在JavaScript中處理JSON數據。

這將涵蓋大多數用例(請注意,UNIX時間戳不一定是10個字符長)。 如果在生產中使用,應使用更多的語法糖來防止意外更換價值。

只有在頁面加載時注入JSON時才應該使用它,而不是通過XHR注入

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

當然! 使用:

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代碼。

<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代碼:

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

運行時,它顯示:

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

如果您可以傳遞一個看起來像JavaScript對象文字的字符串(不使用其中的變量),則字符串可以是eval以轉換為對象。 這意味着您可以將其用作JSON。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM