在 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 循环,因此每一行都有一个;在你的第二个中,只剩下一个 <?php echo $for_JS_date; ?>
。那应该怎么搭配呢?循环去哪儿了?您是否对其进行了任何更改,以便它现在将值累积到这个单个字符串变量中,而不是单独回显它们?
感谢您的回答。我不太确定你在说什么,但下面的 Saud 解决了它。 php 循环正在产生我需要的东西,但这是我在 JS 日期选择器中通过包含 而不是将其与 .= 连接来复制它的方式
【参考方案1】:
您的 JavaScript 看起来不错,错误在于您的 PHP 语法。您首先需要初始化一个变量,然后您需要连接到它。您在字符串中添加了<BR>
标记,如果您在 html 中打印字符串,该标记可能会起作用。由于您在 JavaScript 中打印字符串,因此会产生错误。因为在 JavaScript 中没有 <BR>
这样的东西。以下是您的字符串在执行之前在 JavaScript 中生成的示例:
eventDates[ new Date( '03/22/2021' )] = new Date( '03/22/2021' );<BR>
正如您所见,<BR>
标签只是坐在那里,只会造成麻烦。以下是您需要修改代码的内容:
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 = <?= $for_JS_date ?>;
初始化它并像这样访问它 var highlight = obj[date];
再次感谢,是的,我可以按照您所说的进行操作(我会继续努力的——我是一名房屋建筑商,所以我需要时间来锻炼)。但我可以看到(我认为)这是获取日期并将其插入 JS 的一种更简洁的方法。
@Timespider 肯定没问题。请记住,始终在后端进行任何类型的处理,而只在前端进行渲染。除非您正在构建 SPA,否则请尽量减少用户端的流程。查看此answer 进行澄清。快乐编码。 :)以上是关于在 PHP 中为 JS Datepicker 输出日期 - 突出显示日期的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin 中为 DatePicker 添加最小日期验证检查
如何在 FXML 中为 javafx DatePicker 设置默认值?
jQuery:在 Datepicker 中为选定的日期添加样式
如何在 swift 中为一个文本字段禁用 DatePicker 交互(用于选择日期)“