Как я могу изменить фиксированные значения дней между двумя датами в переменную и использовать обработчик событий JavaScript, чтобы показать вывод?

Как указано в названии, я хотел бы сделать переменную из "2011-11-2","2011-11-05", которые являются датой начала и конца даты

 <?php echo getWorkingDays("2011-11-2","2011-11-05",$holidays); ?>;

Как я могу изменить фиксированное значение дней между двумя датами в переменную из PHP-функции вычисления рабочего дня и использования обработчика событий javascript для отображения выходных данных?

Когда пользователь выбирает дату из средства выбора даты в обоих текстовых полях "DateFrom" и "DateTo", тогда пользователь должен нажать кнопку "Проверить день (ы)", чтобы вычислить число двух дат между указанными.

Ниже приведена функция PHP для получения рабочего дня между двумя датами:

<?php
function getWorkingDays($startDate,$endDate,$holidays){

$days = (strtotime($endDate) - strtotime($startDate)) / 86400 + 1;

$no_full_weeks = floor($days / 7);
$no_remaining_days = fmod($days, 7);

$the_first_day_of_week = date("N", strtotime($startDate));
$the_last_day_of_week = date("N", strtotime($endDate));

if ($the_first_day_of_week <= $the_last_day_of_week) {
    if ($the_first_day_of_week <= 6 && 6 <= $the_last_day_of_week) $no_remaining_days--;
    if ($the_first_day_of_week <= 7 && 7 <= $the_last_day_of_week) $no_remaining_days--;
}
else {

    if ($the_first_day_of_week == 7) {
        $no_remaining_days--;

        if ($the_last_day_of_week == 6) {
            $no_remaining_days--;
        }
    }
    else {

        $no_remaining_days -= 2;
    }
}

$workingDays = $no_full_weeks * 5;
if ($no_remaining_days > 0 )
{
  $workingDays += $no_remaining_days;
}

foreach($holidays as $holiday){
    $time_stamp=strtotime($holiday);

    if (strtotime($startDate) <= $time_stamp && $time_stamp <= strtotime($endDate) && date("N",$time_stamp) != 6 && date("N",$time_stamp) != 7)
        $workingDays--;
}

return $workingDays;
}

$holidays=array("");
?>

Когда я повторяю фиксированное значение даты, оно отлично работает

    <?php echo getWorkingDays("2011-11-2","2011-11-05",$holidays); ?>;

Далее следуют JavaScript и форма:

    <link rel="stylesheet" type="text/css" href="tcal.css" />
    <script type="text/javascript" src="tcal.js">
    </script> 

    <form name=fname method='post'>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">&nbsp;</td>
      <td nowrap="nowrap" align="right"><div align="left">Date From:</div></td>
      <td><div>
      <input id="dateFrom" type="text" name="DateFrom" class="tcal" value='' autocomplete="off" />
    </div></td>
      </tr>
    <tr valign="baseline">
      <td nowrap="nowrap" align="right">&nbsp;</td>
      <td nowrap="nowrap" align="right"><div align="left">Date To:</div></td> 
      <td><div>
          <input id="dateTo" type="text" name="DateTo" class="tcal" value="" autocomplete="off"/>
    </div></td>
    </tr>
    <p>
    <input id="leavetakens" name="leavetakens" type="text" value="" readonly="readonly">

    <input type="button" value="Check Day(s)" name="btnCalculate" onClick="abc()"></p>
    </form>


    <script type="text/javascript">

    function abc()
    {
var jsvar = <?php echo getWorkingDays("2011-11-2","2011-11-05",$holidays); ?>;

var dateFrom = document.getElementById("dateFrom").value;
var dateTo = document.getElementById("dateTo").value;

document.fname.leavetakens.value=jsvar

    }

    </script>

На данный момент я могу только показать значение из двух фиксированных указанных дат, но как сделать его переменным? Заранее спасибо =)

P / S: Извините за мой плохой английский

2 ответа

<?php $workday=getWorkingDays("2011-11-2","2011-11-05",$holidays); ?>;

Кажется, что вы хотите вызвать функцию сервера /PHP (т.е. getWorkingDays()) со стороны клиента /JavaScript. Вы можете достичь этого через AJAX в abc(),

Полный AJAX может выглядеть так:

var dateFrom = document.getElementById("dateFrom").value;
var dateTo = document.getElementById("dateTo").value;
var xmlhttp;
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
}
else { // code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        document.fname.leavetakens.value = xmlhttp.responseText;
    }
}
xmlhttp.open("GET", "getWorkingDays.php?dateFrom="+dateFrom+"&dateTo="+dateTo, true);
xmlhttp.send();

где getWorkingDays.php принимает два параметра, а именно dateFrom а также dateToв строке запроса и вызвать PHP getWorkingDays() функция, а затем возвращает / записывает значение.

Если вы используете jQuery (или другую библиотеку JavaScript), это значительно сэкономит ваше время и код:

var dateFrom = $("#dateFrom").val();
var dateTo = $("#dateTo").val();

$.get('getWorkingDays.php', {dateFrom: dateFrom, dateTo: dateTo}, function(data) {
    $('#leavetakens').val(data);
});

GetWorkingDays.php будет выглядеть примерно так:

<?php echo getWorkingDays($_GET["dateFrom"],$_GET["dateTo"],$holidays); ?>;
Другие вопросы по тегам