如何在Javascript数组中存储MySQL日期?

时间:2017-07-04 03:39:00

标签: javascript php mysql arrays

我在互联网上搜索过,有很多方法可以通过PHP将MySQL记录存储到Javascript数组中,例如this one。但是,我无法在Javascript中存储日期记录。

让我们说,

我的MySQL日期记录行名为holiday_date:2017-06-25,2017-06-26,2017-05-27。

我将如何通过

将其转换为json后存储在Javascript中
<?php
    $sql = "SELECT public_holiday.holiday_date 
            FROM public_holiday";
    $result = mysqli_query($conn, $sql);

    $result_array = Array();

    while($row = mysqli_fetch_assoc($result))
    {
         $result_array[] = $row;
    }

    $json_array = json_encode($result_array);

    echo $json_array;
  ?>

我试图将它们存储到像

这样的javascript日期数组中
var holidays = [<?php //sample array for example 
        $loop_one = true;
        foreach ($result_array as $date) 
        {
            if ($loop_one) 
            {
                echo "'new Date(\'$date\')'";
                $loop_one=false;
            } 
            else 
            {
                echo ", 'new Date(\'$date\')'";
            }
        }
?>];

但所有这些都无效。

我需要你的帮助,非常感谢。

3 个答案:

答案 0 :(得分:1)

因此,在您的示例中,$result_array变量将是一个PHP数组,如:

$result_array = ['2017-06-25', '2017-06-26', '2017-06-27'];

在将其传递给Javascript之前,您并不需要将其转换为JSON。相反,您可以将这些字符串值直接打印到Javascript中以实例化日期对象,即

<?php
$sql = "SELECT holiday_date FROM public_holiday";
$result = mysqli_query($conn, $sql);

$result_array = Array();

while($row = mysqli_fetch_assoc($result))
{
     $result_array[] = $row['holiday_date'];  # Return the actual date value and not an array
}
?>

Javascript Part:

var holidays = [<?php 
    $firstLoop = true;
    foreach ($result_array as $date_result) {
        # Here you could format your $date_result variable as a specific datetime format if needed to make it compatible with Javascripts Date class.
        if ($firstLoop) {
            $firstLoop = false;
            echo "new Date('$date_result')";
        } else {
            echo ", new Date('$date_result')";
        }
    }
?>];

在这个例子中,我正在构建一个new Date($phpDateTime)个对象的javascript数组。

答案 1 :(得分:1)

要获取javaScript日期对象数组,只需更改脚本代码,无需更改PHP代码 您可以使用 JSON.parse forEach 循环。

试试这个

<script>
    var holidays = '<?php  echo $json_array;?>';
    holidays=JSON.parse(holidays);
    var holidayArray=[];
    holidays.forEach(function (key) {
        holidayArray.push(new Date(key));
    });
    console.log(holidays);
    console.log(holidayArray);
</script>

它将产生一个输出

enter image description here

我会帮助你。

答案 2 :(得分:0)

您的while loop应该是这样的,并将date推送到新阵列

<?php

$result_array = Array();

while($row = mysqli_fetch_assoc($result))
{
     $result_array[] = $row['public_holiday.holiday_dat'];
}

 //$result_array contains date like this $result_array = ['2017-06-26', '2017-06-27'];

?>

Javascript示例 e

<script>

    var holidays = [<?php $result_array = ['2017-06-26', '2017-06-27']; //sample array for example 
    $loop_one = true;
    foreach ($result_array as $date) {

        if ($loop_one) {
            echo "'new Date(\'$date\')'";

            $loop_one=false;
        } else {
            echo ", 'new Date(\'$date\')'";
        }
    }
?>];

 console.log(holidays);

</script>

更新1:最后您的代码应该是这样的

<?php
    $sql = "SELECT public_holiday.holiday_date FROM public_holiday";

    $result = mysqli_query($conn, $sql);

    $result_array = Array();

    while($row = mysqli_fetch_assoc($result))
    {
        $result_array[] = $row['public_holiday.holiday_dat'];
    }

?>
<script>

    var holidays = [<?php
    $loop_one = true;
    foreach ($result_array as $date) {

        if ($loop_one) {
            echo "'new Date(\'$date\')'";

            $loop_one=false;
        } else {
            echo ", 'new Date(\'$date\')'";
        }
    }
?>];

 console.log(holidays);

</script>