Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript日期对象';s月份索引以0开头_Javascript_Php_Mysql_Timestamp_Google Visualization - Fatal编程技术网

JavaScript日期对象';s月份索引以0开头

JavaScript日期对象';s月份索引以0开头,javascript,php,mysql,timestamp,google-visualization,Javascript,Php,Mysql,Timestamp,Google Visualization,我的目标是以高效的方式将时间戳从MySQL转换为JavaScript日期对象。以下是我当前的代码片段,它将MySQL时间戳转换为PHP格式的日期: <?php // formats timestamp into following format: 2009, 7, 30 $date = date("Y, n, j", strtotime($row["date"])); ?> 问题是JavaScript日期对象以0开始月份索引,因此输出总是提前1个月。处理这个问题最有效的方法是什么

我的目标是以高效的方式将时间戳从MySQL转换为JavaScript日期对象。以下是我当前的代码片段,它将MySQL时间戳转换为PHP格式的日期:

<?php
// formats timestamp into following format: 2009, 7, 30
$date =  date("Y, n, j", strtotime($row["date"]));
?>
问题是JavaScript日期对象以0开始月份索引,因此输出总是提前1个月。处理这个问题最有效的方法是什么


提前谢谢

恐怕您必须手动从月数中减去额外的
1
。JS Date对象很乱。

您可以向日期构造函数提供mm/dd/yyyy或yyyy/mm/dd格式的日期,它将转换为:

>>> new Date('7/30/2009');
Thu Jul 30 2009 00:00:00 GMT-0700 (Pacific Daylight Time)
>>> new Date('2009/7/30');
Thu Jul 30 2009 00:00:00 GMT-0700 (Pacific Daylight Time)
获得类似的日期

不必遍历php中的查询行,您可以直接使用MySQL格式,如下所示:

<?php
$sql = "
    SELECT 
        CONCAT('Date(', YEAR(datefield), ',', (MONTH(datefield)-1), ',', DAY(datefield), ')') AS gChartDate, 
        valuefield
    FROM 
        table 
    ORDER BY
        datefield
";
$query = $pdo->query($sql);
$fetchAll = $query->fetchAll(PDO::FETCH_NUM); // fetch in not-associative array
array_unshift($fetchAll, [['type'=>'date', 'label'=>'date'], 'value']); // add title row
$json = json_encode($fetchAll, JSON_NUMERIC_CHECK);

这正是我所害怕的。我震惊地发现了这一点!你震惊地发现JS是一堆丑陋的东西D@AjayPatel-“一些案例”,需要详细说明吗?记住,男孩和女孩们,营销人员希望我们用这种令人困惑的语言编写服务器!好吧,不是建设性的(笑一笑吧,这都是开玩笑的),但我只是想把这个扔出去。我仍然对零索引月而非年或日的不一致性感到惊讶。如果你想在JS日期上大发雷霆,你不会被它所束缚——我强烈推荐的一个替代方案是,它围绕本机日期,并提供各种功能(例如日期比较、日期算术、解析、格式化输出).这篇文章的标题暗示你对索引等于零感到震惊。哈哈,你说得对。这篇文章是三年前写的。现在我回顾一下,有趣的是,我对从0=)开始的指数感到惊讶。我认为你的惊讶在这种情况下是合理的:指数为零的月份值是完全不直观的。Javascript的创建者有意识地不将日期值或年份值归零(没有年份0,因此零索引年份将减少1)。为什么这个逻辑没有被带入月专栏是不可理解的。我已经搜索了整整一个月了。。。等一下。。。我的意思是零个月。人力资源管理。谢谢这个人。我已经愤怒了好几天,想知道为什么我的约会选择者会打电话给七月八月。结果是有人完全疯了,决定用指针算法来实现这一点。作为参考,自从有人问过它以来,大多数语言中数组以零开始的原因是指针运算。当您试图找到一系列固定宽度字符串的内存位置时,基本上取基本指针,然后将索引乘以单元格/字符串长度,以获得指向所需值的指针。0*index+base pointer=第一项的位置。如何通过GoogleCharts数据源协议所需的JSON响应实现这一点?我遇到了同样的问题,但不能像这样格式化我的回答。JSON不支持日期对象,所以Google添加了一个字符串扩展hack,例如:
{“v”:“Date(2009,7,30)”}
,这使得June变为June,但他们不支持
{“v”:“Date('2009/7/30')”}
或类似的。。。
"Date(2015,0,31)" // note the quotes from the json string and the 0 for January
<?php
$sql = "
    SELECT 
        CONCAT('Date(', YEAR(datefield), ',', (MONTH(datefield)-1), ',', DAY(datefield), ')') AS gChartDate, 
        valuefield
    FROM 
        table 
    ORDER BY
        datefield
";
$query = $pdo->query($sql);
$fetchAll = $query->fetchAll(PDO::FETCH_NUM); // fetch in not-associative array
array_unshift($fetchAll, [['type'=>'date', 'label'=>'date'], 'value']); // add title row
$json = json_encode($fetchAll, JSON_NUMERIC_CHECK);
var data = google.visualization.arrayToDataTable(<?php echo($json) ?>);