[英]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.