Problème date

vandouzen007 Messages postés 48 Date d'inscription lundi 21 octobre 2013 Statut Membre Dernière intervention 29 mars 2014 - 24 oct. 2013 à 10:02
corentin.93 Messages postés 1737 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 19 décembre 2015 - 1 nov. 2013 à 15:44
Bonjour,
J'ai le code ci-dessous et il calcul tous simplement le nombre de jour entre deux date saisi par l'utilisateur!!
Problème: J'aimerai bien y introduire dans le calcul les jours fériés et les weekend!!
C'est à dire quand le calcul du nombre de jour est lancé, il prendra compte aussi les jours non ouvrable!!

Quelqu'un peut m'aider svp!! Urgent

Merci
<html>
<head>
<script language="javascript">
function strtotime(str, now) {

var i, match, s, strTmp = '', parse = '';

strTmp = str;
strTmp = strTmp.replace(/\s{2,}|^\s|\s$/g, ' '); // unecessary spaces
strTmp = strTmp.replace(/[\t\r\n]/g, ''); // unecessary chars

if (strTmp == 'now') {
return (new Date()).getTime()/1000; // Return seconds, not milli-seconds
} else if (!isNaN(parse = Date.parse(strTmp))) {
return (parse/1000);
} else if (now) {
now = new Date(now*1000); // Accept PHP-style seconds
} else {
now = new Date();
}

strTmp = strTmp.toLowerCase();

var process = function (m) {
var ago = (m[2] && m[2] == 'ago');
var num = (num = m[0] == 'last' ? -1 : 1) * (ago ? -1 : 1);

switch (m[0]) {
case 'last':
case 'next':
switch (m[1].substring(0, 3)) {
case 'yea':
now.setFullYear(now.getFullYear() + num);
break;
case 'mon':
now.setMonth(now.getMonth() + num);
break;
case 'wee':
now.setDate(now.getDate() + (num * 7));
break;
case 'day':
now.setDate(now.getDate() + num);
break;
case 'hou':
now.setHours(now.getHours() + num);
break;
case 'min':
now.setMinutes(now.getMinutes() + num);
break;
case 'sec':
now.setSeconds(now.getSeconds() + num);
break;
default:
var day;
if (typeof (day = __is.day[m[1].substring(0, 3)]) != 'undefined') {
var diff = day - now.getDay();
if (diff == 0) {
diff = 7 * num;
} else if (diff > 0) {
if (m[0] == 'last') diff -= 7;
} else {
if (m[0] == 'next') diff += 7;
}
now.setDate(now.getDate() + diff);
}
}
break;

default:
if (/\d+/.test(m[0])) {
num *= parseInt(m[0]);

switch (m[1].substring(0, 3)) {
case 'yea':
now.setFullYear(now.getFullYear() + num);
break;
case 'mon':
now.setMonth(now.getMonth() + num);
break;
case 'wee':
now.setDate(now.getDate() + (num * 7));
break;
case 'day':
now.setDate(now.getDate() + num);
break;
case 'hou':
now.setHours(now.getHours() + num);
break;
case 'min':
now.setMinutes(now.getMinutes() + num);
break;
case 'sec':
now.setSeconds(now.getSeconds() + num);
break;
}
} else {
return false;
}
break;
}
return true;
};

var __is =
{
day:
{
'sun': 0,
'mon': 1,
'tue': 2,
'wed': 3,
'thu': 4,
'fri': 5,
'sat': 6
},
mon:
{
'jan': 0,
'feb': 1,
'mar': 2,
'apr': 3,
'may': 4,
'jun': 5,
'jul': 6,
'aug': 7,
'sep': 8,
'oct': 9,
'nov': 10,
'dec': 11
}
};

match = strTmp.match(/^(\d{2,4}-\d{2}-\d{2})(?:\s(\d{1,2}:\d{2}(:\d{2})?)?(?:\.(\d+))?)?$/);
if (match != null) {
if (!match[2]) {
match[2] = '00:00:00';
} else if (!match[3]) {
match[2] += ':00';
}

s = match[1].split(/-/g);

for (i in __is.mon) {
if (__is.mon[i] == s[1] - 1) {
s[1] = i;
}
}
s[0] = parseInt(s[0], 10);

s[0] = (s[0] >= 0 && s[0] <= 69) ? '20'+(s[0] < 10 ? '0'+s[0] : s[0]+'') : (s[0] >= 70 && s[0] <= 99) ? '19'+s[0] : s[0]+'';
return parseInt(this.strtotime(s[2] + ' ' + s[1] + ' ' + s[0] + ' ' + match[2])+(match[4] ? match[4]/1000 : ''), 10);
}

var regex = '([+-]?\\d+\\s'
+ '(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?'
+ '|sun\.?|sunday|mon\.?|monday|tue\.?|tuesday|wed\.?|wednesday'
+ '|thu\.?|thursday|fri\.?|friday|sat\.?|saturday)'
+ '|(last|next)\\s'
+ '(years?|months?|weeks?|days?|hours?|min|minutes?|sec|seconds?'
+ '|sun\.?|sunday|mon\.?|monday|tue\.?|tuesday|wed\.?|wednesday'
+ '|thu\.?|thursday|fri\.?|friday|sat\.?|saturday))'
+ '(\\sago)?';

match = strTmp.match(new RegExp(regex, 'g'));
if (match == null) {
return false;
}

for (i in match) {
if (!process(match[i].split(' '))) {
return false;
}
}

return (now.getTime()/1000);
}

function calcul(total,d1,d2)
{ // on se limite à un prix avec un taux de TVA et des frais de port
x=document.getElementById(d1);
d1=x.value; // DATE 1
x=document.getElementById(d2);d2=x.value; // DATE 2

r=Math.round((strtotime(d2) - strtotime(d1))/(60*60*24)-1)+1; // On calcule
x=document.getElementById(total);x.value=r; // On affecte
}
</script>
</head>
<body>
<form name="frm">
DATE 1 : <input type="text" name="d1" id="d1" onBlur="calcul('total','d1','d2')" value="0"><br/>
DATE 2 : <input type="text" name="d2" id="d2" onBlur="calcul('total','d1','d2')" value="0"><br/>
<br/>
Total : <input id="total" type="text" name="total" readonly="true">
</form>
</body>
</html>

1 réponse

corentin.93 Messages postés 1737 Date d'inscription dimanche 20 mai 2007 Statut Membre Dernière intervention 19 décembre 2015
1 nov. 2013 à 15:44
Bonjour,

Pas beaucoup de possibilité pour toi :
Il faut le faire manuellement, tu tests si le jour à compter est férié OU un week end... Rien de compliqué.
0
Rejoignez-nous