Just nu i M3-nätverket
Jump to content

Datumkontroll


mm5

Recommended Posts

Jag håller på med en datumfunktion som ska användas när ett datum ska lagras i en accessdatabas. Nu kollar funktionen att textfältet inte är tomt och att det bara innehåller nummer eller - eller " ". Den sorterar alltså bort / och t.ex. mars. Nu finns det ju lite olika alternativ som det går att använda men om jag t.ex. skriver 011301 så blir resultatet 2001-01-13 i stället för att IsDate ska säga till att månad 13 inte finns. Någon som vet hur jag ska gå till väga eller någon som sitter inne med en bättre funktion?

Link to comment
Share on other sites

Jag tycker att den bästa lösningen för det mesta är att lagra datumet i textformat i DB. KAn lätt bli problem med landsinställningar, olika DB mm.

Jag brukar ha ett fält som rymmer 10 tecken. Sen kollar jag datumet med JavaScript och användarna måste skriva rätt format.

 

Först en METOD på sträng-klassen som kollar datum. (Lämpligtvis i en js-fil)

--------------------------------

function checkDate(format) { //METOD som kollar datum

//IN:[format] default="yyyymmdd", alt: "yyyy-mm-dd" el "yymmdd"

//UT:true|false

var f = new String("yyyymmdd");

if (arguments[0] != null)

f = format.toLowerCase();

var y=""; var m=""; var d="";

if (f=="yyyy-mm-dd") {

if (this.match(/^\d{4}-{1}\d{2}-{1}\d{2}$/) == null)

return false;

else {

for (i=0;i<4;i++) y += this.charAt(i);

for (i=5;i<7;i++) m += this.charAt(i);

for (i=8;i<10;i++)d += this.charAt(i);

if (y.checkYear()==false) return false;

else if (m.checkMonth()==false) return false;

else if (d.checkDay()==false) return false;

else return true; } }

else if (f=='yyyymmdd') {

if (this.match(/^\d{4}\d{2}\d{2}$/) == null) return false;

else {

for (i=0;i<4;i++) y += this.charAt(i);

for (i=4;i<6;i++) m += this.charAt(i);

for (i=6;i<8;i++) d += this.charAt(i);

if (y.checkYear()==false) return false;

else if (m.checkMonth()==false) return false;

else if (d.checkDay()==false)return false;

else return true; } }

else if (f=='yymmdd') {

if (this.match(/^\d{2}\d{2}\d{2}$/) == null)

return false;

else {

for (i=0;i<2;i++) y += this.charAt(i);

for (i=2;i<4;i++) m += this.charAt(i);

for (i=4;i<6;i++) d += this.charAt(i);

if (y.checkYear('yy')==false) return false;

else if (m.checkMonth()==false) return false;

else if (d.checkDay()==false) return false;

else return true; } }

else return false;

}

 

Sen installerar jag metoden:

------------------------------

String.prototype.checkDate = checkDate;

 

Sen inkluderar jag scriptet:

------------------------------

<script language="javascript" src="common.js"></script>

 

Sen kollar jag datumet:

-----------------------

Anrop sker vid submit på formulär.

<form name="Form1" onSubmit="return validate(this)">

function validate() {

if (document.Form1.datumRutan.value.checkDate()==false){

window.alert("Datum ser inte korrekt ut")

document.Form1.datumRutan.focus();

return false;

}

else

return true;

}

 

 

Mvh Petter

 

Link to comment
Share on other sites

Om du sparar det i ett textfält, hur hämtar du sedan poster mellan två datum där de riktiga datumen måste fungera eller att lägga på två veckor på ett datum ur databasen?

 

 

Link to comment
Share on other sites

mellan två datum är det bara köra med < och >. Funkat bra på Informix, Oracle ochj Access för mig.

 

Att lägga på två veckor har jag aldrig provat men det måste väl gå att göra en funktion som plockar ut veckorna och lägger till 2.

Eller är jag helt ute o cyklar...

Mvh Petter

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...