PHP date()到JavaScript new Data()-数组内部

PHP date()到JavaScript new Data()-数组内部,javascript,php,arrays,json,date,Javascript,Php,Arrays,Json,Date,注:这是对的后续问题 我有一个PHP数组,需要解析为JavaScript。目前我正在尝试这样做,在JavaScript中使用。对于数组中的大多数数据,除了日期之外,这一切都很正常。我尝试分析的数组如下所示: $timeData = array( array('1', 'Some task', date('2015-04-09'), date('2015-04-23')), array('2', 'Another task', date('2015-04-13'),

注:这是对的后续问题

我有一个PHP数组,需要解析为JavaScript。目前我正在尝试这样做,在JavaScript中使用
。对于数组中的大多数数据,除了日期之外,这一切都很正常。我尝试分析的数组如下所示:

$timeData = array(
  array('1', 'Some task',        date('2015-04-09'), date('2015-04-23')),
  array('2', 'Another task',     date('2015-04-13'), date('2015-04-20')),
  array('3', 'A different task', date('2015-04-16'), date('2015-04-30))
);
?>
我需要解析这个数组,使其在中可用,函数如下所示(请参见代码中的注释):


setOnLoadCallback(drawChart);
函数绘图图(){
var container=document.getElementById('example2.1');
var chart=newgoogle.visualization.Timeline(容器);
var dataTable=new google.visualization.dataTable();
addColumn({type:'string',id:'Term'});
addColumn({type:'string',id:'Name'});
addColumn({type:'date',id:'Start'});
addColumn({type:'date',id:'End'});
//这是我想用PHP数组替换的部分
dataTable.addRows([
['1','George Washington',新日期(1789,3,29),新日期(1797,2,3)],
['2','John Adams',新日期(1797,2,3),新日期(1801,2,3)],
['3','Thomas Jefferson',新日期(1801,2,3),新日期(1809,2,3)];
图表绘制(数据表);
}

我尝试了几种在PHP数组中创建日期的不同方法,包括
new Date()
new DateTime()
,但都没有成功。我最后的办法是在解析数据之前,将数组拆分为多个部分。然而,这似乎有点愚蠢,因为它将在JavaScript中再次作为一个数组放在一起。有没有办法在PHP数组中写入日期,以便它们在解析为JavaScript时工作?

您不能将此格式传递给日期构造函数。试着这样做:

var parts = mydate.split('-');
var mydateparsed = new Date(parts[0],parts[1],parts[2]);
希望它对你有用


在PHP端,您可以返回时间戳,以便在JavaScript中更容易处理:

<?php    
$timeData = array(
    array('1', 'Some task',        DateTime::createFromFormat('Y-m-d', date('2015-04-09'))->format('U')*1000, DateTime::createFromFormat('Y-m-d', date('2015-04-23'))->format('U')*1000,
    array('2', 'Another task',     DateTime::createFromFormat('Y-m-d', date('2015-04-09'))->format('U')*1000, DateTime::createFromFormat('Y-m-d', date('2015-04-20'))->format('U')*1000,
    array('3', 'A different task', DateTime::createFromFormat('Y-m-d', date('2015-04-16'))->format('U')*1000, DateTime::createFromFormat('Y-m-d', date('2015-04-30'))->format('U')*1000
);
?>

我在jQuery中创建了一个循环,在使用json_encode转换数组后,将每个日期转换为JS日期:

<?php "var timeData = " . json_encode($timeData) . ";\n"; ?>
$.each( timeData, function ( index, value )
{
    timeData[index]['2'] = new Date(value['2']);
    timeData[index]['3'] = new Date(value['3']);
})

$.each(时间数据、函数(索引、值)
{
timeData[索引]['2']=新日期(值['2']);
timeData[索引]['3']=新日期(值['3']);
})

请注意,此解决方案是在客户端处理的(它减轻了服务器的负担)。

直接用JavaScript从数据库加载数据会更容易吗?据我所知,这应该是可能的,但是比PHP更麻烦。你能解释一下这个问题吗?我不确定你是否理解我的意思是,我在某个地方读到,你可以使用AJAX连接到MySQL数据库。然后,使用它,可以在JavaScript中创建表,而不是从我理解的PHPOk转换表。您有两种实现选项:PHP或AJAX在PHP中,从客户端的角度来看,这是最简单的,但不是动态的。-如果您是一名初学者,使用AJAX会有点困难。你也可以试试。将值包装到JSON结构中,并通过AJAX连接将其提供给客户端。在这种情况下,
rows
到底是什么?我不知道如何从
$timeData
。。?伙计,我很烂:-/谷歌链接看起来很有希望,现在我只需要弄清楚如何使用:-)行是你从PHP得到的数组,但现在是JS。我假设您使用AJAX从PHP获取响应,然后执行回调来呈现图表,也许您的做法有所不同。我已经更新了代码,以显示PHP的预期结果以及JS中针对每种情况的rows变量的值。希望它能有所帮助。目前不使用AJAX,但我开始认为我可能不得不……使用AJAX不是强制性的。如果将JSON内容嵌入到同一个php页面中,只需添加php标记并打印JSON结果,就可以将JSON内容打印到JavaScript中,因此在JS部分中,在
dataTable.addRows(rows)
之前,可以执行以下操作
var rows=。这将把所需的数组结构返回到
行中
变量中,并使脚本正常工作-
/* Assuming rows contains a valid JS array with dates expressed as timestamps in milliseconds
    rows = [
        [1, "Some task", 1428570428000, 1429780165000],
        [2, "Another task", 1428570428000, 1429520977000],
        [3, "A different task", 1429175344000, 1430384993000]
    ];
*/
for (var i = 0; i < rows.length; i++) {
    dataTable.addRow(
        rows[i][0],
        rows[i][1],
        new Date(rows[i][2]),
        new Date(rows[i][3]),
    );
}
<?php    
$timeData = array(
    array('1', 'Some task',        "Date(2015, 3, 9, 0, 0, 0, 0)", "Date(2015, 3, 23, 0, 0, 0, 0)",
    array('2', 'Another task',     "Date(2015, 3, 9, 0, 0, 0, 0)", "Date(2015, 3, 20, 0, 0, 0, 0)",
    array('3', 'A different task', "Date(2015, 3, 16, 0, 0, 0, 0)", "Date(2015, 3, 30, 0, 0, 0, 0)"
);
?>
/* Assuming rows contains a valid JS array with dates expressed as strings
    rows = [
        [1, "Some task", "Date(2015, 3, 9, 0, 0, 0, 0)", "Date(2015, 3, 23, 0, 0, 0, 0)"],
        [2, "Another task", "Date(2015, 3, 9, 0, 0, 0, 0)", "Date(2015, 3, 20, 0, 0, 0, 0)"],
        [3, "A different task", "Date(2015, 3, 16, 0, 0, 0, 0)", "Date(2015, 3, 30, 0, 0, 0, 0)"]
    ];
*/
dataTable.addRows(rows);
<?php "var timeData = " . json_encode($timeData) . ";\n"; ?>
$.each( timeData, function ( index, value )
{
    timeData[index]['2'] = new Date(value['2']);
    timeData[index]['3'] = new Date(value['3']);
})