людей в сети!
Может быть, один из вас обнаружит, что что-то не так в следующей функции:
Это функция javascript, используемая в событии onblur на стороне клиента для проверки того, что введенный текст представляет правильно отформатированную и действительную дату.
Я пробовал несколько раз, и это сработало, но кажется! должен был испробовать все даты!
он будет работать для всех допустимых комбинаций, но он не может анализировать "08" и "09", которые всегда анализируются как 0. Я попробовал это и в IE, и в Firefox, и результат тот же, и консоль javascript FF не находит синтаксическую ошибку в коде.
Кто-нибудь хочет попробовать меня перехитрить? Я оставил в коде предупреждения, чтобы проверить значения моих переменных в критических точках, и мне все кажется нормальным, вплоть до анализа, если у меня есть 08 или 09, в части дня или месяца ...
Используемая функция следующая.
function DateVal(controle, culture, bToday)
{
//var strDate = controle.value;
var separateur = '';
var dayPart = '';
var monthPart = '';
var yearPart = '';
var tblParts;
var isBisexuel = false;
var valid = true;
//alert('DateVal : Controle: ' + controle + 'Controle.value.length: ' + controle.value.length + ' value: ' + controle.value + ' culture: ' + culture);
if (controle.value.length == 10)
{
if (culture == 'en-US')
{// Il s'agit d'un format de date avec séparateur "/", MM/dd/yyyy
separateur = '/';
dayPart = 1;
monthPart = 0;
yearPart = 2;
}
else if (culture == 'en-GB')
{// Il s'agit d'un format de date avec séparateur "/", dd/MM/yyyy
separateur = '/';
dayPart = 0;
monthPart = 1;
yearPart = 2;
}
else if (culture == 'fr-CA')
{// Il s'agit d'un format de date avec séparateur "-", yyyy-MM-dd
separateur = '-';
dayPart = 2;
monthPart = 1;
yearPart = 0;
}
else
{
valid = false;
alert('Le contrôle est mal initialisé (pas de culture ou culture invalide); il n\'y a rien qui va marcher...');
//window.event.returnValue =false;
}
}
else
{
alert('longueur pas valide');
valid = false;
}
if (valid == true)
{
alert('valeur: ' + controle.value + ' separateur: ' + separateur);
tblParts = controle.value.split(separateur);
alert('yavant parse: dayPart: ' + tblParts[dayPart] + 'monthPart: ' + tblParts[monthPart] + ' yearPart: ' + tblParts[yearPart]);
if (tblParts.length == 3)
{
dayPart = parseInt(tblParts[dayPart]);
monthPart = parseInt(tblParts[monthPart]);
yearPart = parseInt(tblParts[yearPart]);
alert('après parse: pos0: ' + dayPart + 'pos1: ' + monthPart + ' pos2: ' + yearPart);
if (isNaN(dayPart) || isNaN(monthPart) || isNaN(yearPart))
{
//alert(dayPart + ' ' + monthPart + ' ' + yearPart);
valid = false;
}
else
{
isBisexuel = ((yearPart % 400 == 0) || (yearPart % 4 == 0 && yearPart % 100 != 0));
alert(isBisexuel);
if (isBisexuel)
{
tblDays = [0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
}
else
{
tblDays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
}
if (monthPart <= 12 && monthPart > 0)
{
if (dayPart > tblDays[monthPart] || dayPart < 1)
{
alert('le jour fitte pas');
valid = false;
}
}
else
{
alert('mois égal à 0 ou moins, ou supérieur à 12');
valid = false;
}
}
}
else
{
alert('le split donne pas 3 morceaux?');
valid = false;
}
}
//window.event.returnValue = valid;
if(valid)
{
return;
}
else
{
if (bToday == true)
{
var dt = new Date();
dayPart = dt.getDate();
if (dayPart.toString().length == 1)
dayPart = '0'+dayPart;
monthPart = dt.getMonth();
if (monthPart.toString().length == 1)
monthPart = '0'+monthPart;
yearPart = dt.getFullYear();
//alert(dayPart + ' ' + monthPart + ' ' + yearPart + ' ' + culture);
switch (culture)
{
case 'fr-CA':
controle.value = yearPart + separateur + monthPart + separateur + dayPart;
break;
case 'en-US':
controle.value = monthPart + separateur + dayPart + separateur + yearPart;
break;
case 'en-GB':
controle.value = dayPart + separateur + monthPart + separateur + yearPart;
break;
}
//alert(controle.value);
}
else
{
controle.value = '';
}
}
}
Спасибо всем, кто пытался!
Pascal