codice:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Pagina senza titolo</title>
<style type="text/css">
BODY
{
BACKGROUND-COLOR: white;
FONT-FAMILY: Verdana, Helvetica, sans-serif;
FONT-SIZE: .8em;
}
H1, H2, H3, H4, H5
{
COLOR: #003366;
}
input {border:1px black solid;}
</style>
<script language="javascript" type="text/javascript">
// <!CDATA[
function $() {
var elements = new Array();
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}
/*---------------------------------------------------------------------
Questa funzione accetta una variabile stringa e verifica se e una data.
La data deve essere nel formato giorno mese anno. Il giorno e il mese
devono essere di 1 o 2 cifre, l'anno deve essere di 2 o 4 cifre.
Il delimitatore deve essere / o - o .
Restituisce un oggetto con le proprieta:
.isdate = vero o falso
.error = messaggio errore
.year = anno
.month = mese (1 - 12)
.monthname = Gennaio - Dicembre
.day = giorno (1 - 31)
.data = oggetto data
---------------------------------------------------------------------*/
function isdate(dateStr)
{
var ret = new Object();
ret.isdate = false;
ret.error = "";
ret.year = 0;
ret.month = 0;
ret.monthname = "";
ret.day = 0;
ret.data = null;
// inizio stringa
// 1 o 2 cifre
// / o - o .
// 1 o 2 cifre
// / o - o .
// 4 cifre
// fine stringa
//var datePat = /^(\d{1,2})(\/|-|.)(\d{1,2})(\/|-|.)(\d{4})$/;
//var datePat = /^\s*(\d{1,2})(\/|-|\.)(\d{1,2})(\2)(\d{2}|\d{4})\s*$/;
var datePat = /^\s*(\d{1,2})(\/|-|\.)(\d{1,2})(\2)(\d{4})\s*$/;
//restituisce, allo stesso modo di una matrice, i risultati di una ricerca
//di una stringa utilizzando un oggetto Regular Expression
var matchArray = dateStr.match(datePat);
if (matchArray == null) {
ret.error = "Per favore, introduci la data nei formati gg/mm/aaaa o gg-mm-aaaa o gg.mm.aaaa";
return ret;
}
day = matchArray[1];
month = matchArray[3];
year = matchArray[5];
if(year.length == 2)
if(parseInt(year,10) < 30)
year = parseInt(year,10) + 2000;
else
year = parseInt(year,10) + 1900;
if (month < 1 || month > 12) { // il mese deve essere compreso tra 1 e 12
ret.error = "Il mese deve essere compreso tra 1 e 12.";
return ret;
}
if (day < 1 || day > 31) {//il giorno non puo essere < 1 e > 31
ret.error = "Il giorno deve essere compreso tra 1 e 31";
return ret;
}
if ((month==4 || month==6 || month==9 || month==11) && day==31) {
//i mesi aprile, giugno, settembre, novembre, hanno 30 giorni
ret.error = "Il mese " + month + " non ha 31 giorni!";
return ret;
}
if (month == 2) { // verifica se l'anno e bisestile: febbraio puo avere 29 giorni
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day > 29 || (day==29 && !isleap)) {
ret.error = "Febbraio " + year + " non ha " + day + " giorni!";
return ret;
}
}
isDateError = "";
// se sono qui, la data e valida!
ret.isdate = true;
ret.error = "";
ret.year = year;
ret.month = month;
ret.day = day;
ret.data = new Date(year, (month - 1), day);
switch(parseInt(month,10))
{
case 1: ret.monthname = "Gennaio"; break;
case 2: ret.monthname = "Febbraio"; break;
case 3: ret.monthname = "Marzo"; break;
case 4: ret.monthname = "Aprile"; break;
case 5: ret.monthname = "Maggio"; break;
case 6: ret.monthname = "Giugno"; break;
case 7: ret.monthname = "Luglio"; break;
case 8: ret.monthname = "Agosto"; break;
case 9: ret.monthname = "Settembre"; break;
case 10: ret.monthname = "Ottobre"; break;
case 11: ret.monthname = "Novembre"; break;
case 12: ret.monthname = "Dicembre"; break;
default: ret.monthname = ""; break;
}
return ret;
}
//------------------------------------------------
//valida la stringa dateStr
//------------------------------------------------
function IsDate(dateStr)
{
var datePat = /^((3[01]|[12]\d|0?[1-9])\/(0?[13578]|10|12)\/(\d\d)?\d\d|(30|[12]\d|0?[1-9])\/(0?[469]|11)\/(\d\d)?\d\d|(2[0-8]|[01]\d|0?[1-9])\/(0?2)\/(\d\d)?\d\d|29\/(0?2)\/(1200|1600|2000|2400|2800|00)|29\/(0?2)\/(\d\d)?(0[48]|[2468][048]|[13579][26]))$/;
var matchArray = dateStr.match(datePat);
return !(matchArray == null);
}
//---------------------------------------------------------------------------
//Confronta le due stringhe data d1 e d2 e restituisce:
//null se d1 o d2 non sono date valide
//-1 se d1 < d2
// 0 se d1 = d2
// 1 se d1 > d2
//---------------------------------------------------------------------------
function dateComp(d1, d2)
{
var isdate1 = isdate(d1);
var isdate2 = isdate(d2);
if(!isdate1.isdate || !isdate2.isdate) return null;
var d1 = new Date(isdate1.year, isdate1.month-1, isdate1.day);
var d2 = new Date(isdate2.year, isdate2.month-1, isdate2.day);
if(d1.getTime() == d2.getTime())
return 0;
else if(d1.getTime() < d2.getTime())
return -1;
else if(d1.getTime() > d2.getTime()) return 1;
}
document.onkeypress = document_onkeypress;
function document_onkeypress(e)
{
var code;
if (!e) var e = window.event;
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
var character = String.fromCharCode(code);
var target = (e.target)?e.target:e.srcElement;
var id = target.id;
var CorrenteSeparatoreDecimale = '<%=CorrenteSeparatoreDecimale%>'.charCodeAt(0);
//integer
if(id == "text1" || id == "_txt_data_documento" || id == "txt_data_protocollo_industra")
{
if ( !((code >= 48 && code <= 57 ) || code == 8 || code == 37 || code == 39 || code == 36 || code == 35) )
{
if (window.event)
{
e.returnValue = false;
e.cancelBubble;
}
else
{
if(e.preventDefault) e.preventDefault;
return false;
}
}
}
//float
else if(id == "text2" || id == "_txt_data_documento" || id == "txt_data_protocollo_industra")
{
if ( !((code >= 48 && code <= 57 ) || code == CorrenteSeparatoreDecimale || code == 8 || code == 37 || code == 39 || code == 36 || code == 35) )
{
if (window.event)
{
e.returnValue = false;
e.cancelBubble;
}
else
{
if(e.preventDefault) e.preventDefault;
return false;
}
}
}
//data
else if(id == "Text1" || id == "_txt_data_documento" || id == "txt_data_protocollo_industra")
{
if ( !((code >= 48 && code <= 57 ) || code == 47 || code == 8 || code == 37 || code == 39 || code == 36 || code == 35) )
{
if (window.event)
{
e.returnValue = false;
e.cancelBubble;
}
else
{
if(e.preventDefault) e.preventDefault;
return false;
}
}
else
{
if(id == "Text1")
window.setTimeout(function(){ controllaData.call(target); }, 1);
}
}
//sostituzione del codice digitato
else if(id == "text4" || id == "_txt_data_documento" || id == "txt_data_protocollo_industra")
{
if(code == 46)
{
if (window.event)
{
e.returnValue = false;
e.cancelBubble;
}
else
{
var newEvent = document.createEvent("KeyEvents");
newEvent.initKeyEvent("keypress", true, true, document.defaultView, e.ctrlKey, e.altKey, e.shiftKey, e.metaKey, 0, "*".charCodeAt(0)) ;
if(e.preventDefault) e.preventDefault();
target.dispatchEvent(newEvent);
return false;
}
}
}
}
window.onload = window_onload;
function window_onload()
{
var d = $("Text1");
d.focus();
}
function controllaData()
{
//$("div1").innerHTML = this.value;
var d = this.value;
var ret = isdate(d);
if(!ret.isdate)
{
this.style.color = "red";
}
else
{
this.style.color = "blue";
this.value = ret.day + " " + ret.monthname + " " + ret.year;
}
}
// ]]>
</script>
</head>
<body>
<h3>prova data</h3>
<input id="Text1" type="text" />
<div id="div1"></div>
</body>
</html>