我有一个函数,它根据变量
指定日期离。 $ modification =“+1周”
function calendar($modification){
$month = array("Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December");
$date = new DateTime(date('Y-m-d'));
$date->modify($modification);
$year = $date->format('o');
$week = $date->format('W');
$fulldate = $date->format('c');
$valEnc = 'W';
$monthNum = $date->format('n');
$modDate = date('Y-m-d',strtotime($fulldate));
$mMon = date('n', mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week")), date("Y") ));
$mTue = date('n', mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+1, date("Y") ));
$mWed = date('n', mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+2, date("Y") ));
$mThu = date('n', mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+3, date("Y") ));
$mFri = date('n', mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+4, date("Y") ));
$mSat = date('n', mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+5, date("Y") ));
$mSun = date('n', mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+6, date("Y") ));
$dayMonth = compact("mMon","mTue","mWed","mThu","mFri","mSat","mSun");
$mon = date('j',mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week")), date("Y")));
$tue = date('j',mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+1, date("Y")));
$wed = date('j',mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+2, date("Y")));
$thu = date('j',mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+3, date("Y")));
$fri = date('j',mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+4, date("Y")));
$sat = date('j',mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+5, date("Y")));
$sun = date('j',mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+6, date("Y")));
$days = compact("mon","tue","wed","thu","fri","sat","sun");
$weekNum = date("W", strtotime("$year$valEnc$week"));
$mName = $month[($monthNum)-1];
$yearNum= $date->format('Y');
$calendar= compact("dayMonth", "days", "weekNum", "mName", "yearNum"); // $calendar['array'][value] / $calendar[value]
//print_r($calendar);
return $calendar;
}
如何从页面上的按钮指定$ modify然后重新加载函数?
实施例。按钮增加= +1周,按钮减少= -1周。
编辑:已解决
PHP:
$dMod = $_GET['mod'];
$mod = $dMod;
if ($dMod >= 0) {
$mod = '+'.$dMod.'';
}
$modification = "".$mod." week";
date_default_timezone_set ("/*TIMEZONE*/");
function calendar($modification){
$todayweek = date('W', mktime(0, 0, 0, date('m'), date("d"), date("Y") ));
$today = date('D');
$month = array("Januari","Februari","Mars","April","Maj","Juni","Juli","Augusti","September","Oktober","November","December");
$date = new DateTime(date('Y-m-d'));
$date->modify($modification);
$year = $date->format('o');
$week = $date->format('W');
if ($todayweek==$week && $today=='Fri'){
$date->modify($modification);
$year = $date->format('o');
$week = $date->format('W');
}
$fulldate = $date->format('c');
$valEnc = 'W';
$monthNum = $date->format('n');
$modDate = date('Y-m-d',strtotime($fulldate));
$fMon = mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week")), date("Y") );
$fTue = mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+1, date("Y") );
$fWed = mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+2, date("Y") );
$fThu = mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+3, date("Y") );
$fFri = mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+4, date("Y") );
$fSat = mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+5, date("Y") );
$fSun = mktime(0, 0, 0, date('m', strtotime("$modDate")), date("d", strtotime("$year$valEnc$week"))+6, date("Y") );
$fulldate = compact("fMon","fTue","fWed","fThu","fFri","fSat","fSun");
$mMon = date('n', $fMon);
$mTue = date('n', $fTue);
$mWed = date('n', $fWed);
$mThu = date('n', $fThu);
$mFri = date('n', $fFri);
$mSat = date('n', $fSat);
$mSun = date('n', $fSun);
$dayMonth = compact("mMon","mTue","mWed","mThu","mFri","mSat","mSun");
$mon = date('j', $fMon);
$tue = date('j', $fTue);
$wed = date('j', $fWed);
$thu = date('j', $fThu);
$fri = date('j', $fFri);
$sat = date('j', $fSat);
$sun = date('j', $fSun);
$days = compact("mon","tue","wed","thu","fri","sat","sun");
$weekNum = date("W", strtotime("$year$valEnc$week"));
$mName = $month[($monthNum)-1];
$yearNum= $date->format('Y');
$calendar= compact("fulldate", "dayMonth", "days", "weekNum", "mName", "yearNum"); // $calendar['array'][value] / $calendar[value]
return $calendar;
}
?>
JS:
$( document ).ready(function() {
var $input = $('#calMod');
var calCheckWeek = function() {
var theDate = new Date();
if(theDate.getDay() >= 5){ //if its friday, switch to next week
if ($calMod == 0);{
$input.val(1);
};
};
};
calCheckWeek();
var $calMod = $input.val();
$('.load-div').load('/inc/calendar.php?mod=' + $calMod, function () {
if ($calMod <= 0) {
$('.calendar-prev-week').hide();
}
else {
$('.calendar-prev-week').show();
}
console.log("Calendar loaded successfully!");
});
$('.calendar-prev-week').click(function () {
var $input = $('#calMod');
var value = parseInt($input.val());
value = value - 1;
$input.val(value);
var $calMod = $input.val();
if ($calMod <= 0) {
$('.calendar-prev-week').hide();
}
else {
$('.calendar-prev-week').show();
}
$('.load-div').load('/inc/calendar.php?mod=' + $calMod, function () {
console.log("Decreased Week Number");
});
});
$('.calendar-next-week').click(function () {
var $input = $('#calMod');
var value = parseInt($input.val());
value = value + 1;
$input.val(value);
var $calMod = $input.val();
if ($calMod <= 0) {
$('.calendar-prev-week').hide();
}
else {
$('.calendar-prev-week').show();
}
$('.load-div').load('/inc/calendar.php?mod=' + $calMod, function () {
console.log("Increased Week Number");
});
});
我创建了2个按钮增加&amp;减少一周,做了一个隐藏的输入'#calMod',因为整个页面没有刷新(我只在特定的div'.load-div'加载日历)每次按下按钮时都不会重置该值增加或减少一周,因为我只希望它显示工作日我添加了一个检查,以查看其星期五是否更多(如果(theDate.getDay()&gt; = 5),如果是,它将在下一周首次加载时更改为,你仍然可以回去一周(到当前一周),但不能再回来了。
现在我的“周”日历按预期工作。
下一步是选择日期并将它们存储在JSon中。感谢您的帮助和想法!
答案 0 :(得分:1)
使用HTML button
元素调用PHP函数而不重新加载页面:
calendar.html
<div id="buttons_week">
<button>+1 Week</button>
<button>-1 Week</button>
</div>
<div id="calendar"></div>
<script>
// get display target
var calendar = document.getElementById('calendar');
// get buttons and loop
Array.prototype.forEach.call(document.querySelectorAll('#buttons_week button'), function (elem) {
// add function to click event
elem.addEventListener('click', function (evt) {
// set up XHR object
if ( window.XMLHttpRequest ) {
xmlhttp=new XMLHttpRequest() // IE7+, Firefox, Chrome, Opera, Safari
}
else { // IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
// here's where you handle the response you get from the PHP script
// for debugging
//calendar.innerHTML = xmlhttp.responseText
//console.log(JSON.parse(xmlhttp.responseText))
// parse JSON string from server and update calendar
var calendar_obj = JSON.parse(xmlhttp.responseText)
calendar.innerHTML = calendar_obj.weekNum + '/' + calendar_obj.mName + '/' + calendar_obj.yearNum
}
}
xmlhttp.open("GET","calendar.php?mod="+encodeURIComponent(evt.target.innerHTML),true);
xmlhttp.send();
})
})
</script>
calendar.php
<?php
echo json_encode(calendar($_GET['mod']));
function calendar($modification){
// function body here, removed for brevity
}
?>
如果您不需要去服务器寻找别的东西,那么这里是一个全JavaScript版本。无需致电服务器!
<div id="buttons_week">
<button>+1 Week</button>
<button>-1 Week</button>
</div>
<div id="calendar"></div>
<script>
var calendar = document.getElementById('calendar');
Array.prototype.forEach.call(document.querySelectorAll('#buttons_week button'), function (elem) {
elem.addEventListener('click', function (evt) {
var calendar_obj = week_increment(evt.target.innerHTML)
console.log(calendar_obj.days)
console.log(calendar_obj.dayMonth)
calendar.innerHTML =
calendar_obj.weekNum + '/' +
calendar_obj.mName + '/' +
calendar_obj.yearNum
})
})
function week_increment(mod) {
var dd = new Date()
var week_inc = 7 * 24 * 60 * 60 * 1000
if ( 0 === mod.indexOf('-') ) { week_inc *= -1 } // decrement week
dd = new Date(dd.getTime() + week_inc)
dd.setHours(0,0,0);
var dayMonth = [], days = [], weekNum
dd.setHours(-24 * ((dd.getDay() || 7) - 1))
for ( ii = 0; ii < 7; dd.setHours(24), ii++ ) {
days.push(dd.getDate())
dayMonth.push(dd.getMonth()+1)
if ( 3 === ii ) { // get weekNum on Thursday ??
weekNum = Math.ceil((((dd-new Date(dd.getFullYear(),0,1))/8.64e7)+1)/7) // http://stackoverflow.com/a/18005464/2743458
}
}
return {
'dayMonth': dayMonth,
'days': days,
'weekNum': weekNum,
'mName': months[dd.getMonth()],
'yearNum': dd.getFullYear()
}
}
var months = ['Januari','Februari','Mars','April','Maj','Juni','Juli','Augusti','September','Oktober','November','December'];
</script>