按日期检查jquery是不是为假期的功能

Posted

技术标签:

【中文标题】按日期检查jquery是不是为假期的功能【英文标题】:Function to check if it's holiday in jquery by date按日期检查jquery是否为假期的功能 【发布时间】:2017-11-29 20:08:29 【问题描述】:

我正在尝试在 jquery 中创建一个函数,根据我的数据库检查给定日期是否为假期。我已经创建了函数:

IsAHoliday(date)

这是我的代码:

function IsAHoliday(date) 
    var datum = moment(date).format('YYYY-MM-DD');
    var dataString = 'action='+ datum;
    $.ajax (
        type: "POST",
        url: 'include/datumPraznik.php',
        cache: false,
        async: false,
        data: dataString,
        success: function(r)
        
            return r;
         
    );

使用此代码我无法执行类似的操作

if(IsAHoliday(date)) 

我怎样才能做到这一点?


编辑:这是我的 datumPraznik.php
<?php
    include_once('db-config.php');

    $datum = $_REQUEST['action'];
    $stmt=$db_con->prepare('SELECT * FROM praznici WHERE praznik_datum=:datum');
    $stmt->execute(array(':datum'=>$datum));
    $row = $stmt->fetchAll(PDO::FETCH_ASSOC);
    if(count($row)>0)
    
        $praznik = true;
    
    else
    
        $praznik = false;
    
    echo $praznik;
?>

【问题讨论】:

你的 datumPraznik.php 代码是什么? @Dino 我已经更新了我的问题。 由于ajax调用是异步的,所以需要把你的处理放到代码的成功部分 【参考方案1】:

那么你可以做些什么让你的 PHP 返回 JSON,这样你就可以使用 AJAX 成功函数来处理它。

$datum = $_REQUEST['action'];
$stmt=$db_con->prepare('SELECT * FROM praznici WHERE praznik_datum='.$datum);
$stmt->execute();
if($stmt->fetchColumn() > 0)
    $praznik = true;
 else 
    $praznik = false;

return json_encode(array('praznik' => $praznik));

你的 AJAX 会是

$.post('include/datumPraznik.php', data, function(d) 
if(d.praznik === true) 
console.log('This is a holiday');
 else 
console.log('This is not a holiday');

);

所以你更新的函数是:

function isHoliday(date) 
 var datum = moment(date).format('YYYY-MM-DD');
 var data = 'action='+ datum;
    $.post('include/datumPraznik.php', data, function(d) 
    if(d.praznik === true) 
    return true;
     else 
    return false;
    
    );


并将其用作:

if(isHoliday(date) === true) 
// do something

【讨论】:

感谢您的回答。我在 datumPraznik.php 中添加了一行 echo json_encode(array('praznik' =&gt; $praznik));,所以像 site/datumPraznik.php?action=2017-06-26 这样运行 smth 会给出正确的结果。但是在 Inspect Element Console 中运行函数 IsHoliday("2017-06-26") 会给我未定义的结果...【参考方案2】:

首先,PHP需要返回JSON,所以改一下:

echo $praznik;

到:

echo json_encode($praznik);

第二,由于 AJAX 是异步的(你不应该使用async: false),你的函数应该接受回调:

function IsAHoliday(date, truecb, falsecb) 
    var datum = moment(date).format('YYYY-MM-DD');
    var dataString = 'action='+ datum;
    $.ajax (
        type: "POST",
        url: 'include/datumPraznik.php',
        cache: false,
        data: dataString,
        success: function(r)
        
            if (r) 
                truecb();
             else 
                falsecb();
            
         
    );

然后你可以这样称呼它:

IsAHoliday(date, function() 
    // stuff to do on holiday
, function() 
    // stuff to do on non-holiday
);

【讨论】:

【参考方案3】:

我无法使用您的解决方案解决我的问题,但我已经将它们结合起来并得出了这个解决方案。

    我创建了一个全局变量(数组)并调用了 ajax,它返回 ALL HOLIDAY DATES 并将它们存储在全局变量中。
    var prazniciArray = [];
    $(document).ready(function()
    
        $.ajax (
            type: "POST",
            url: 'include/datumPraznik.php',
            dataType: 'json',
            cache: false,
            success: function(rez)
            
                praznici = rez;
                for (var i = 0; i < praznici.length; i++) 
                    prazniciArray.push(moment(praznici[i]));
                
                $('#datetimepicker1').data("DateTimePicker").disabledDates(prazniciArray);
             
        );
    
    之后我就可以制作函数了:
function IsHoliday(date) 
    var datum = moment(date).format('YYYY-MM-DD');
    if(jQuery.inArray(datum, praznici) !== -1)
    
        return true
    
    else
    
        return false;
    

    datumPraznik.php
<?php
    include_once('db-config.php');

    $stmt=$db_con->prepare('SELECT praznik_datum FROM praznici');
    $stmt->execute();
    $row = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $praznici = count($row);
    $prazniciarray = array();

    for ($i = 0; $i < $praznici; $i++)     
        array_push($prazniciarray,$row[$i]["praznik_datum"]);
    

    echo json_encode($prazniciarray);
?>

我的桌子是这样的:

praznik_id | praznik_ime  | praznik_datum   
-----------------------------------------
|     1    | Thanksgiving | 2017.07.01   

【讨论】:

以上是关于按日期检查jquery是不是为假期的功能的主要内容,如果未能解决你的问题,请参考以下文章

从VB6检查访问中的假期表中是不是存在日期

如何在 jQuery UI 日期选择器中禁用公共假期?

试图弄清楚如何从 jquery datepicker 中删除假期

如何在给定日期前 14 天避免假期

Amazon Redshift:公共假期表的重复日期

在访问中提取一系列日期并跳过假期