从PHP返回DateTime到JS的好做法
Good practice to return DateTime from PHP to JS
我已经创建了文件api.php
<?php
// Prevent caching.
header('Cache-Control: no-cache, must-revalidate');
// The JSON standard MIME header.
header('Content-type: application/json');
//mssql_select_db("**", mssql_connect(**));
$conn=mssql_connect(***);
$query = "SELECT ROUND([AirTemp_C],1) as [T]
,[DT]
FROM [ASUTP].[dbo].[Temperature_ER]
WHERE [Place] = 'ER06' AND [DT] > '26.05.2015 11:00'";
$qwr_res = mssql_query($query);
while ($row=mssql_fetch_array($qwr_res))
{
$temps[] = array (
'x' => $row['DT'],
'y' => $row['T']
);
}
echo json_encode($temps);
?>
它返回JSON,如[{"x":"2015-05-26 11:02:04","y":26.3}]与我的测量值。
我想使用canvasjs-1.6.2使用这些数据绘制图形。这是我的代码:窗口。Onload = function () {
$.getJSON("api.php",function(data1)
{
var chart = new CanvasJS.Chart("chartContainer",
{
title:{
text: "Title",
fontSize: 30
},
animationEnabled: true,
zoomEnabled:true,
height: 500,
axisX:{
gridColor: "Silver",
tickColor: "silver",
labelAngle: -80,
valueFormatString: "DD.MM HH:mm"
},
toolTip:{
shared:true
},
theme: "theme2",
axisY: {
gridColor: "Silver",
tickColor: "silver"
},
legend:{
verticalAlign: "center",
horizontalAlign: "right"
},
data: [
{
type: "line",
showInLegend: true,
lineThickness: 2,
name: "T",
//markerType: "square",
color: "#F08080",
dataPoints: data1
}
],
legend:{
cursor:"pointer",
itemclick:function(e){
if (typeof(e.dataSeries.visible) === "undefined" || e.dataSeries.visible) {
e.dataSeries.visible = false;
}
else{
e.dataSeries.visible = true;
}
chart.render();
}
}
});
chart.render();
});
但似乎这个图表(或JS)不能使用我的日期值作为一个正确的日期时间,所以图表不能渲染。
我已经修复了这个问题的循环:
for(var i=0;i<data1.length;i++)
{
data1[i].x = new Date(data1[i].x);
}
我应该注意到我使用的是PHP 5.2,我不允许升级它。所以我的问题是:
- 是我的方式获得数据图表通过api.php正确吗?
- 有没有一种方法通过正确的DateTime值从php到JS没有循环转换?
如评论中所述,最可靠的跨浏览器传输日期的方法是使用时间值。UNIX时间值从1970-01-01T00:00:00Z开始以秒为单位。Javascript时间值来自同一纪元,但使用毫秒,因此您只需将UNIX时间值乘以1000并直接传递给Date构造函数。
JSON可能是这样的:
'[{x:"1432788147300", y:26.3}]'
如果x值被读入名为unixTimeValue的变量中,代码将是这样的:
var javascriptDate = new Date(unixTimeValue * 1000);
然而,如果你不能这样做,你可以相当容易地解析像'2015-05-26 11:02:04'这样的字符串。假设日期是UTC,您可以使用 date。UTC转换为日期对象:
function parseISOUTC(s) {
var b = s.split(/'D/);
return new Date(Date.UTC(b[0],b[1],b[2],b[3],b[4],b[5]));
}
相关文章:
- 为vis.js(PHP到JavaScript)准备一个数组
- 当用HTML5+JS+PHP设计发送到电子邮件的表单时,需要采取哪些良好的安全预防措施
- AJAX/JS/PHP:如何替换发送到PHP文件的文件中的文本,并传递成功属性
- jQuery/JS/PHP - 仅在提交后禁用表单和提交按钮
- 一个简单的JS-PHP验证(或者我是这么认为的)
- 使用相同文件的 Html/JS/PHP 两个页面看起来不同(仅在 chrome 中)
- AES - Crypto JS & PHP
- PHP 无法调用 shell 脚本 (js -> php -> sh)
- JS & PHP Interaction
- JS/PHP cross urlencoding and urldecoding
- 为什么这个 js-php 生成的位置引用在 IE8 中不起作用
- Js+PHP:从文本文件中读取值
- Ajax调用JS+PHP不起作用
- JS/PHP复选框名称
- 如何检查是否使用html/js/php等创建了cookie
- 如何在JS/PHP的Microtime中从服务器时间倒计时到最接近的半小时
- 在Nginx上运行PHP和Node.js(PHP的PHP扩展文件,Node的html扩展文件)
- Facebook JS/PHP SDK
- js/php with include files
- Angular.js+PHP:如果在ngSanitized html模板内,则不执行Angular表达式