【问题标题】:Output Dates in PHP for JS Datepicker - Highlight Dates在 PHP 中为 JS Datepicker 输出日期 - 突出显示日期
【发布时间】:2021-06-25 04:23:11
【问题描述】:

已经在这里看了几天,但我不确定我的问题是什么。我有这个 php 代码可以从我的数据库中获取日期

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
    
    
    $php_array_dates = date('m/d/Y',strtotime($row["date_date"]));/*Changes date to 23/03/2021*/
         
    $for_JS_date = "eventDates[ new Date("." '".$php_array_dates."' ".")] = new Date("." '".$php_array_dates."' ".");<BR>";
     
     //$formatted_JS_date = trim($formatted_JS_date, '"');
     
     
     echo $for_JS_date;
}

}

echo $for_JS_date; 输出(看起来很完美),这只是为了让我可以看到正在生成的内容。

eventDates[ new Date( '03/31/2021' )] = new Date( '03/31/2021' );
eventDates[ new Date( '03/29/2021' )] = new Date( '03/29/2021' );
eventDates[ new Date( '03/30/2021' )] = new Date( '03/30/2021' );

现在,当我将 php 变量 $for_JS_date 添加到 jquery 日期选择器时,它会破坏 javascript,即使它是我需要的 identicle 格式。事实上,如果我手动编写由 php 变量生成的日期,它就可以正常工作。这可能是我正在做的愚蠢的事情,但我不知所措。下面是日期选择器代码。

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.0/themes/base/jquery-ui.css">
<style>   
.event a {
    background-color: #5FBA7D !important;
    color: #ffffff !important;
}
</style>

<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.0/jquery-ui.js"></script>
<script>                                                                                
$( function() {

    // An array of dates
    var eventDates = {};
      /*eventDates[ new Date( '03/31/2021' )] = new Date( '03/31/2021' );
        eventDates[ new Date( '03/29/2021' )] = new Date( '03/29/2021' );
        eventDates[ new Date( '03/30/2021' )] = new Date( '03/30/2021' );*/
    
    
    <?php echo $for_JS_date; ?>
    
    // datepicker
    $('#datepicker').datepicker({
        
        /*###START### MONTH & YEAR MENUS ###START###*/
        changeMonth: true,
        changeYear: true,
        /*###END### MONTH & YEAR MENUS ###END###*/
        
        beforeShowDay: function( date ) {
            var highlight = eventDates[date];
            if( highlight ) {
                 return [true, "event", 'Tooltip text'];
            } else {
                 return [true, '', ''];
            }
        }
    });
});
</script>

【问题讨论】:

  • 在第一个 sn-p 中,您似乎正在执行 echo $for_JS_date; inside 循环,因此每一行都有一个;在你的第二个中,只剩下一个 &lt;?php echo $for_JS_date; ?&gt;。那应该怎么搭配呢?循环去哪儿了?您是否对其进行了任何更改,以便它现在将值累积到这个单个字符串变量中,而不是单独回显它们?
  • 感谢您的回答。我不太确定你在说什么,但下面的 Saud 解决了它。 php 循环正在产生我需要的东西,但这是我在 JS 日期选择器中通过包含
    而不是将其与 .=
    连接来复制它的方式

标签: javascript php jquery mysql


【解决方案1】:

您的 JavaScript 看起来不错,错误在于您的 PHP 语法。您首先需要初始化一个变量,然后您需要连接到它。您在字符串中添加了&lt;BR&gt; 标记,如果您在 HTML 中打印字符串,该标记可能会起作用。由于您在 JavaScript 中打印字符串,因此会产生错误。因为在 JavaScript 中没有 &lt;BR&gt; 这样的东西。以下是您的字符串在执行之前在 JavaScript 中生成的示例:

eventDates[ new Date( '03/22/2021' )] = new Date( '03/22/2021' );<BR>

正如您所见,&lt;BR&gt; 标签只是坐在那里,只会造成麻烦。以下是您需要修改代码的内容:

if ($result->num_rows > 0) {
    $for_JS_date = null;

    // output data of each row
    while($row = $result->fetch_assoc()) {
        $php_array_dates = date('m/d/Y',strtotime($row["date_date"]));/*Changes date to 23/03/2021*/
                
        $for_JS_date .= "eventDates[ new Date("." '".$php_array_dates."' ".")] = new Date("." '".$php_array_dates."' ".");";
    }
}

上面显示的代码会做什么?

它不会替换您在数组中的索引,而是会追加到您的数组中。

P.s:有比这更好的方法,但我只是在回答你原来的问题!

【讨论】:

  • 谢谢 Saud,我会对不同的方法感兴趣。你能指出我正确的方向吗?
  • @Timespider 是的,当然!在您的方法中,您通过 PHP 生成 JavaScript 代码。相反,您可以稍微调整您的代码并在后端(PHP)格式化您的数组,然后将该完全格式化的数组发送到 JavaScript 并访问它。怎么样,你可能会问?这很容易。我会尽我所能解释,希望你能理解...... :)
  • 首先用数组$for_JS_date = array();初始化变量。然后你可以用$for_JS_date[$php_array_dates] = $php_array_dates; 代替$for_JS_date = "eventDates...。在while 循环之外,您需要json_encode 这个变量json_encode($for_JS_date)。并在 JavaScript 中像这样 let obj = &lt;?= $for_JS_date ?&gt;; 初始化它并像这样访问它 var highlight = obj[date];
  • 再次感谢,是的,我可以按照您所说的进行操作(我会继续努力的——我是一名房屋建筑商,所以我需要时间来锻炼)。但我可以看到(我认为)这是获取日期并将其插入 JS 的一种更简洁的方法。
  • @Timespider 肯定没问题。请记住,始终在后端进行任何类型的处理,而只在前端进行渲染。除非您正在构建 SPA,否则请尽量减少用户端的流程。查看此answer 进行澄清。快乐编码。 :)
猜你喜欢
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多