在 PHP 中为 JS Datepicker 输出日期 - 突出显示日期

Posted

技术标签:

【中文标题】在 PHP 中为 JS Datepicker 输出日期 - 突出显示日期【英文标题】:Output Dates in PHP for JS Datepicker - Highlight Dates 【发布时间】: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 日期选择器中通过包含 而不是将其与 .= 连接来复制它的方式 【参考方案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 进行澄清。快乐编码。 :)

以上是关于在 PHP 中为 JS Datepicker 输出日期 - 突出显示日期的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xamarin 中为 DatePicker 添加最小日期验证检查

如何在 FXML 中为 javafx DatePicker 设置默认值?

jQuery:在 Datepicker 中为选定的日期添加样式

如何在 swift 中为一个文本字段禁用 DatePicker 交互(用于选择日期)“

在javascript中为datepicker设置maxDate和minDate,不起作用

在AngularJS中为jQuery datepicker动态设置最大限制