Guest Posted April 4, 2011 Share Posted April 4, 2011 Below is my code. It calculates the dates & post the in my PHP form. If I type in a date in the sent_date field it calculates the correct dates according to the math in the code. My question is, is there any way to edit this code so if one of the calculated dates falls on a Saturday or Sunday, the date displayed will be the previous Fridays date? <script type="text/javascript"> var valid; function d2(v) { return (v<10)?("0"+v):v; } function dcheck(form) { var s = form.sent_date.value; var dr = form.due_rev.value; var su = form.due_suspo; var clk = form.due_clerk; var att = form.due_attny; var jdg = form.due_owner; var sent = new Date(s); var due_rev = new Date(dr); var due_suspo = new Date(su); var due_clerk = new Date(clk); var due_attny = new Date(att); var due_owner = new Date(jdg); if (isNaN(due_rev)) { due_rev = new Date(due_suspo.getFullYear(),due_suspo.getMonth(),due_suspo.getDate()-2); } if (isNaN(due_suspo)) { due_suspo = new Date(due_clerk.getFullYear(),due_clerk.getMonth(),due_clerk.getDate()-2); } if (isNaN(due_clerk)) { due_clerk = new Date(due_attny.getFullYear(),due_attny.getMonth(),due_attny.getDate()-2); } if (isNaN(due_attny)) { due_attny = new Date(sent.getFullYear(),sent.getMonth(),sent.getDate()-36); } if (isNaN(due_owner)) { due_owner = new Date(sent.getFullYear(),sent.getMonth(),sent.getDate()-7); } form.sent_date.value = (sent.getFullYear()) + "-" + d2(sent.getMonth()+1) + "-" + d2(sent.getDate()); form.due_rev.value = (due_attny.getFullYear()) + "-" + d2(due_attny.getMonth()+1) + "-" + d2(due_attny.getDate()-6); form.due_suspo.value = (due_attny.getFullYear()) + "-" + d2(due_attny.getMonth()+1) + "-" + d2(due_attny.getDate()-4); form.due_clerk.value = (due_attny.getFullYear()) + "-" + d2(due_attny.getMonth()+1) + "-" + d2(due_attny.getDate()-2); form.due_attny.value = d2(due_attny.getFullYear()) + "-" + d2(due_attny.getMonth()+1) + "-" + d2(due_attny.getDate()); form.due_owner.value = (due_owner.getFullYear()) + "-" + d2(due_owner.getMonth()+1) + "-" + d2(due_owner.getDate()); return true; } </script> Quote Link to comment https://forums.phpfreaks.com/topic/232669-need-jscript-help-please/ Share on other sites More sharing options...
Adam Posted April 5, 2011 Share Posted April 5, 2011 When I first looked at this I thought it was going to be simple, but quickly realised it wasn't with what's available in the JavaScript Date object -- Google weren't much use either. So I decided to write a prototype function that could do it (name needs a bit more thought like): Date.prototype.setAsPrevFridayIfWeekend = function() { // Convert date to previous Friday's if a weekend if (this.getDay() == 0 || this.getDay() == 6) { var move_back = (this.getDay() == 0) ? 2 : 1; if (this.getDate() <= move_back) { if (this.getMonth() == 0) { this.setMonth(11); this.setFullYear(this.getFullYear() - 1); } else { this.setMonth(date.getMonth - 1); } this.setDate(this.getDaysInMonth() - (move_back - this.getDate())); } else { this.setDate((this.getDate() - move_back)); } } } Within this though I had to add another prototype function to work out the number of days in a month, so I borrowed some code from about.com and rewrote it as a prototype function: Date.prototype.getDaysInMonth = function() { var m = [31,28,31,30,31,30,31,31,30,31,30,31]; if (this.getMonth() != 1) return m[this.getMonth()]; if (this.getYear()%4 != 0) return m[1]; if (this.getYear()%100 == 0 && this.getYear()%400 != 0) return m[1]; return m[1] + 1; } So now you can simply include those two prototype functions and call the setAsPrevFridayIfWeekend Date method (as I said the name needs some work), to convert it to the Friday before if it's a weekend. Some test cases (remember months are from 0-11, not 1-12 in JavaScript): window.onload = function() { var date1 = new Date(2011, 0, 1); // Saturday 1st January 2011 date1.setAsPrevFridayIfWeekend(); alert(date1.toString()); // Fri 31st December 2010 var date2 = new Date(2011, 3, 10); // Sunday 10th April 2011 date2.setAsPrevFridayIfWeekend(); alert(date2.toString()); // Fri 8th April 2011 var date3 = new Date(2011, 3, 5); // Tuesday 5th April 2011 date3.setAsPrevFridayIfWeekend(); alert(date3.toString()); // Tuesday 5th April 2011 } Quote Link to comment https://forums.phpfreaks.com/topic/232669-need-jscript-help-please/#findComment-1197169 Share on other sites More sharing options...
Adam Posted April 5, 2011 Share Posted April 5, 2011 I think setAsLastWorkingDay sounds better actually..? Date.prototype.setAsLastWorkingDay = function() { Quote Link to comment https://forums.phpfreaks.com/topic/232669-need-jscript-help-please/#findComment-1197171 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.