有没有办法在PHP中创建包含javascript date
对象的JSON对象? json_encode
会自动将PHP的DateTime
转换为Javascript的date
吗?
答案 0 :(得分:13)
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数据类型的列表。
答案 1 :(得分:9)
您可以将日期/时间作为UNIX时间戳传递,该时间戳是一个整数,是JSON中本机支持的数据类型。 PHP中的DateTime有一个“getTimestamp()”函数,它将为您提供该值。
答案 2 :(得分:1)
简答:不。
JSON只是文本,所有值都是数组,对象,数字,字符串,布尔值或null。在这种情况下,“对象”基本上只是一个PHP数组 - 它不能有方法。您需要手动将日期(将是字符串)转换为日期。
JSON的正式定义是http://www.json.org/
答案 3 :(得分: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)}
如果要在JavaScript中处理JSON数据。
这将涵盖大多数用例(请注意,UNIX时间戳不一定是10个字符长)。如果在生产中使用,应使用更多的语法糖来防止意外更换价值。
只有在页面加载时注入JSON时才应该使用它,而不是通过XHR注入,例如。
<html>
<head>
<script>
var myData = <?=$json_data?>;
</script>
</head>
<body>
</body>
</html>
答案 4 :(得分:-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代码。
<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。
希望这有帮助。