Как я могу изменить фиксированные значения дней между двумя датами в переменную и использовать обработчик событий 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"> </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"> </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); ?>;