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

как указано в названии, я хотел бы сделать переменную из "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 ]

0 голосов
/ 04 ноября 2011

Кажется, что вы хотите вызвать функцию сервера / 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); ?>;
0 голосов
/ 04 ноября 2011
<?php $workday=getWorkingDays("2011-11-2","2011-11-05",$holidays); ?>;
...