473,545 Members | 2,543 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

dd/mm/yyyy Date Compare Problem

Hi,

I have a working script that converts a dd/mm/yyyy text box date entry
to yyyy/mm/dd and compares it to the current date, giving an error
through an asp.net custom validator, it is as follows:

function doDateCheckNow( source, args)
{
var oDate = document.getEle mentById(source .controltovalid ate); //
dd/mm/yyyy
var arrDate = oDate.value.spl it("/");
var useDate = new Date(arrDate[2], arrDate[1]-1, arrDate[0]); //
yyyy/mm/dd
var today = new Date();

if (useDate <= today)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}

I have then attempted to use an adapted version of this to compare a
date entered into a text box (dodTxtBx) with the text loaded into an
asp.net label (dobLbl):

function doDateCheckDod( dodTxtBx, dobLbl, args)
{
// Convert DOD to javascript date format
var oDodDate = dodTxtBx; // dd/mm/yyyy
var arrDodDate = oDodDate.value. split("/");
var useDodDate = new Date(arrDodDate[2], arrDodDate[1],
arrDodDate[0]); // yyyy/mm/dd

// Convert DOB to javascript date format
var oDobDate = dobLbl; // dd/mm/yyyy
var arrDobDate = oDobDate.value. split("/");
var useDobDate = new Date(arrDobDate[2], arrDobDate[1],
arrDobDate[0]); // yyyy/mm/dd

if (useDobDate < useDodDate)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}

But this creates errors on the page when it runs and always fails the
custom validator.

Any ideas why?

Many Thanks

Apr 28 '06 #1
12 29426
Assimalyst wrote:
Hi,

I have a working script that converts a dd/mm/yyyy text box date entry
to yyyy/mm/dd and compares it to the current date, giving an error
through an asp.net custom validator, it is as follows:

function doDateCheckNow( source, args)
{
var oDate = document.getEle mentById(source .controltovalid ate); //
dd/mm/yyyy
var arrDate = oDate.value.spl it("/");
var useDate = new Date(arrDate[2], arrDate[1]-1, arrDate[0]); //
yyyy/mm/dd
var today = new Date();

if (useDate <= today)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}

I have then attempted to use an adapted version of this to compare a
date entered into a text box (dodTxtBx) with the text loaded into an
asp.net label (dobLbl):

function doDateCheckDod( dodTxtBx, dobLbl, args)
{
// Convert DOD to javascript date format
var oDodDate = dodTxtBx; // dd/mm/yyyy
var arrDodDate = oDodDate.value. split("/");
var useDodDate = new Date(arrDodDate[2], arrDodDate[1],
arrDodDate[0]); // yyyy/mm/dd

// Convert DOB to javascript date format
var oDobDate = dobLbl; // dd/mm/yyyy
var arrDobDate = oDobDate.value. split("/");
var useDobDate = new Date(arrDobDate[2], arrDobDate[1],
arrDobDate[0]); // yyyy/mm/dd

if (useDobDate < useDodDate)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}

But this creates errors on the page when it runs and always fails the
custom validator.

Any ideas why?

Many Thanks


Your function works fine for me when called correctly: (IE6 & Firefox
1.5)

<input type="text" id="timetest" onblur="doDateC heckNow(this);" >

function doDateCheckNow( source) {
var oDate = source; //dd/mm/yyyy
var arrDate = oDate.value.spl it("/");
var useDate = new Date(arrDate[2], arrDate[1]-1, arrDate[0]);
//yyyy/mm/dd
var today = new Date();

if (useDate <= today)
{
alert("true");
}
else
{
alert("false");
}

}

How are you calling your function? Try putting some alerts after each
variable is set/changes, to make sure your getting the text data from
your fields.

I don't know that this has anything to do with ASP...

- JS

Apr 28 '06 #2
Assimalyst wrote:
if (useDate <= today)


You can't compare dates this way. Instead, you should probably compare their
..getTime() values.

For parsing dates, converting between formats, and comparing, see my Date
library at http://www.JavascriptToolbox.com/lib/date/ which might make your
life easier.

--
Matt Kruse
http://www.JavascriptToolbox.com
http://www.AjaxToolbox.com
Apr 28 '06 #3
jshanman wrote:
Assimalyst wrote:
Hi,

I have a working script that converts a dd/mm/yyyy text box date
entry to yyyy/mm/dd and compares it to the current date, giving an
error through an asp.net custom validator, it is as follows:

function doDateCheckNow( source, args)
{
var oDate = document.getEle mentById(source .controltovalid ate); //
dd/mm/yyyy
var arrDate = oDate.value.spl it("/");
var useDate = new Date(arrDate[2], arrDate[1]-1, arrDate[0]); //
yyyy/mm/dd
var today = new Date();

if (useDate <= today)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}

I have then attempted to use an adapted version of this to compare a
date entered into a text box (dodTxtBx) with the text loaded into an
asp.net label (dobLbl):

function doDateCheckDod( dodTxtBx, dobLbl, args)
{
// Convert DOD to javascript date format
var oDodDate = dodTxtBx; // dd/mm/yyyy
var arrDodDate = oDodDate.value. split("/");
var useDodDate = new Date(arrDodDate[2], arrDodDate[1],
arrDodDate[0]); // yyyy/mm/dd

// Convert DOB to javascript date format
var oDobDate = dobLbl; // dd/mm/yyyy
var arrDobDate = oDobDate.value. split("/");
var useDobDate = new Date(arrDobDate[2], arrDobDate[1],
arrDobDate[0]); // yyyy/mm/dd

if (useDobDate < useDodDate)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}

But this creates errors on the page when it runs and always fails the
custom validator.

Any ideas why?

Many Thanks


Your function works fine for me when called correctly: (IE6 & Firefox
1.5)


Why doesn't it work in NN 4 ?
Apr 28 '06 #4
Steve Kostecke wrote:
jshanman wrote:
Assimalyst wrote:
Hi,

I have a working script that converts a dd/mm/yyyy text box date
entry to yyyy/mm/dd and compares it to the current date, giving an
error through an asp.net custom validator, it is as follows:

function doDateCheckNow( source, args)
{
var oDate = document.getEle mentById(source .controltovalid ate); //
dd/mm/yyyy
var arrDate = oDate.value.spl it("/");
var useDate = new Date(arrDate[2], arrDate[1]-1, arrDate[0]); //
yyyy/mm/dd
var today = new Date();

if (useDate <= today)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}

I have then attempted to use an adapted version of this to compare a
date entered into a text box (dodTxtBx) with the text loaded into an
asp.net label (dobLbl):

function doDateCheckDod( dodTxtBx, dobLbl, args)
{
// Convert DOD to javascript date format
var oDodDate = dodTxtBx; // dd/mm/yyyy
var arrDodDate = oDodDate.value. split("/");
var useDodDate = new Date(arrDodDate[2], arrDodDate[1],
arrDodDate[0]); // yyyy/mm/dd

// Convert DOB to javascript date format
var oDobDate = dobLbl; // dd/mm/yyyy
var arrDobDate = oDobDate.value. split("/");
var useDobDate = new Date(arrDobDate[2], arrDobDate[1],
arrDobDate[0]); // yyyy/mm/dd

if (useDobDate < useDodDate)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}

But this creates errors on the page when it runs and always fails the
custom validator.

Any ideas why?

Many Thanks


Your function works fine for me when called correctly: (IE6 & Firefox
1.5)


Why doesn't it work in NN 4 ?


Matt Kruse is right, the proper way would actually be using the
..valueOf() (or getTime() method of the date object. This returns the
number of milliseconds from the Unix Epoch (Jan 1st 1970)

Therefore, if a date is more recent, the number of milliseconds would
be high whereas if the date is before the test date, then the number of
millieseconds would be less.

Re-written:
<input type="text" id="timetest" onblur="doDateC heckNow(this);" >

function doDateCheckNow( source) {
var oDate = source; //dd/mm/yyyy
var arrDate = oDate.value.spl it("/");
var useDate = new Date(arrDate[2], arrDate[1]-1, arrDate[0]);
//yyyy/mm/dd
var today = new Date();

if (useDate.valueO f() < today.valueOf() )
{
alert(useDate+" was before "+today);
}
else
{
alert(useDate+" will be after "+today);
}

}

- JS

Apr 28 '06 #5
jshanman wrote:
Steve Kostecke wrote:
jshanman wrote:
> Assimalyst wrote:
>> [...]
>> var useDodDate = new Date(arrDodDate[2], arrDodDate[1],
>> arrDodDate[0]); // yyyy/mm/dd
>> [...]
>> var useDobDate = new Date(arrDobDate[2], arrDobDate[1],
>> arrDobDate[0]); // yyyy/mm/dd
>>
>> if (useDobDate < useDodDate)
>> {
>> args.IsValid = true;
>> }
>> else
>> {
>> args.IsValid = false;
>> }
>> }
>>
>> But this creates errors on the page when it runs and always fails the
>> custom validator.
>> [...]
> Your function works fine for me when called correctly: (IE6 & Firefox
> 1.5)

Why doesn't it work in NN 4 ?


Matt Kruse is right, the proper way would actually be using the
.valueOf() (or getTime() method of the date object.


No, against it would not be any more or less proper than without
calling .valueOf() or .getTime(). Automatic type conversion does the job,
see ECMAScript 3 Edition 3 Final, section 11.8 (one wonders how many times
Matt must be told this). And it works perfectly fine in Mozilla/4.8 [en]
(X11; U; Linux 2.6.15.6-20060314.201202 +0100 i686).

However,

args.isValid = (useDobDate < useDodDate);

is more efficient.
PointedEars
--
When the power of love overcomes the love
of power, the world will know peace.
-- Jimi Hendrix
Apr 28 '06 #6
Thomas 'PointedEars' Lahn wrote:
No, against it would not be any more or less proper than without
calling .valueOf() or .getTime(). Automatic type conversion does the job,
see ECMAScript 3 Edition 3 Final, section 11.8 (one wonders how many times
Matt must be told this). And it works perfectly fine in Mozilla/4.8 [en]
(X11; U; Linux 2.6.15.6-20060314.201202 +0100 i686). [...]


That also works in

Mozilla/4.74 [en] (X11; U; Linux 2.6.15.6-20060314.201202 +0100 i686; Nav)

down to

Mozilla/4.08 [en] (WinNT; U ;Nav)
PointedEars
Apr 28 '06 #7
JRS: In article <11************ **********@y43g 2000cwc.googleg roups.com>
, dated Fri, 28 Apr 2006 06:38:24 remote, seen in
news:comp.lang. javascript, Assimalyst <c_******@hotma il.com> posted :
I have a working script that converts a dd/mm/yyyy text box date entry
to yyyy/mm/dd
AFAICS, you do not. It converts "dd/mm/yyyy" to a Date Object, but
yyyy/mm/dd is not involved.
and compares it to the current date, giving an error
through an asp.net custom validator, it is as follows:

function doDateCheckNow( source, args)
{
var oDate = document.getEle mentById(source .controltovalid ate); //
dd/mm/yyyy
Don't let your posting agent line-wrap; posted code should be directly
executable.
var arrDate = oDate.value.spl it("/");
var useDate = new Date(arrDate[2], arrDate[1]-1, arrDate[0]); //
yyyy/mm/dd
or
var useDate = // via yyyy/mm/dd
new Date(oDate.valu e.replace(/(..).(..).(.... )/, "$3/$2/$1"))
var today = new Date(); if (useDate <= today)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
Should be args.IsValid = useDate <= today
}
function doDateCheckDod( dodTxtBx, dobLbl, args)
{
// Convert DOD to javascript date format
var oDodDate = dodTxtBx; // dd/mm/yyyy
var arrDodDate = oDodDate.value. split("/");
var useDodDate = new Date(arrDodDate[2], arrDodDate[1],
arrDodDate[0]); // yyyy/mm/dd

// Convert DOB to javascript date format
var oDobDate = dobLbl; // dd/mm/yyyy
var arrDobDate = oDobDate.value. split("/");
var useDobDate = new Date(arrDobDate[2], arrDobDate[1],
arrDobDate[0]); // yyyy/mm/dd


Repeated code should generally be put in a function. When that is done,
and the function is small, temporary local variables do not need long
names.

--
© John Stockton, Surrey, UK. ?@merlyn.demon. co.uk Turnpike v4.00 IE 4 ©
<URL:http://www.jibbering.c om/faq/> JL/RC: FAQ of news:comp.lang. javascript
<URL:http://www.merlyn.demo n.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demo n.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.
Apr 28 '06 #8
JRS: In article <e2*********@ne ws3.newsguy.com >, dated Fri, 28 Apr 2006
09:04:26 remote, seen in news:comp.lang. javascript, Matt Kruse
<ne********@mat tkruse.com> posted :
Assimalyst wrote:
if (useDate <= today)
You can't compare dates this way. Instead, you should probably compare their
.getTime() values.


I can; why should he be unable to?

In principle, .valueOf() gets the internal value, and .getTime() gets
whatever it wants, which happens to be the same. IIRC, in a context
wanting a Number, .valueOf() is used by default. Comparison is such a
context. ECMA 11.8.5, steps 1 & 2.

But, to make the conversion both brief and explicit,
if (+useDate <= +today)
since unary + converts to Number.
For parsing dates, converting between formats, and comparing, see my Date
library at http://www.JavascriptToolbox.com/lib/date/ which might make your
life easier.


I'd not use a library from someone who does not know that a relational
operator likes to compare Numbers. It might be bloated.
I've not looked at your library code recently (as you may recall, I use
News off-line), so don't know the style.

But ISTM that if you were to write in a subset of javascript,
specifically such that // (and maybe /* */) only occurred as real
comment markers and not in strings, regexps, etc., then it might be
quite easy to produce, in javascript, a de-commenter and de-indenter.
Your library could be fetched in its full glory, but readily reduced to
the working parts without positive obfuscation.

It could operate like the paragraph-pack in js-quick.htm; copy into
textarea, press button, copy out.

But perhaps you already have something better.

--
© John Stockton, Surrey, UK. ?@merlyn.demon. co.uk Turnpike v4.00 IE 4 ©
<URL:http://www.jibbering.c om/faq/> JL/RC: FAQ of news:comp.lang. javascript
<URL:http://www.merlyn.demo n.co.uk/js-index.htm> jscr maths, dates, sources.
<URL:http://www.merlyn.demo n.co.uk/> TP/BP/Delphi/jscr/&c, FAQ items, links.
Apr 28 '06 #9
Dr John Stockton wrote:
You can't compare dates this way. Instead, you should probably
compare their .getTime() values. I can; why should he be unable to?


I was under the (probably mistaken) impression that the explicit conversion
failed in some browser versions for dates, and therefore wasn't good to use.
As this belief goes back a few years, I don't even remember where it
originated.
I've not looked at your library code recently (as you may recall, I
use News off-line), so don't know the style.
I've re-written my date code recently to extend Date using prototypes for
most functions. One thing you might not like is that I don't use regular
expressions to parse text. Instead, I still use the manual substring
approach. Someday I'll update it further, but it's solid as-is, and I don't
have a lot of time, so updating working code doesn't seem like the best use
of it :)
it might be
quite easy to produce, in javascript, a de-commenter and de-indenter.
Your library could be fetched in its full glory, but readily reduced
to the working parts without positive obfuscation.
...But perhaps you already have something better.


I do this in real-time in PHP, actually. I write my code with full comments
and in a style that can be easily reduced. It is then fetched via a PHP
script which either delivers the full code or compacted code. Also, if the
library has any dependencies it can detect this, prepend them into the
source, and deliver a "combined" version. In all my pages and test cases, I
link to the compacted version of the code to make sure that no bugs are
introduced during the compacting.

I also have a fairly extensive set of over 150 test cases at
http://www.javascripttoolbox.com/lib/date/test.php which runs the javascript
in the browser and makes assertions similar to XUnit test suites. It works
well for cross-browser testing of libs like this.

Since you read offline, I'll paste my source below in case you want to look
at it. I'm always open to suggestions, although I can probably already name
many of the same ones that you might offer ;) Hope the code isn't too long,
and of course beware of wrapping.

/*
Date functions

These functions are used to parse, format, and manipulate Date objects.
See documentation and examples at http://www.JavascriptToolbox.com/lib/date/

*/
Date.$VERSION = 1.01;

// Utility function to append a 0 to single-digit numbers
Date.LZ = function(x) {return(x<0||x> 9?"":"0")+x};
// Full month names. Change this for local month names
Date.monthNames = new
Array('January' ,'February','Ma rch','April','M ay','June','Jul y','August','Se ptember','Octob er','November', 'December');
// Month abbreviations. Change this for local month names
Date.monthAbbre viations = new
Array('Jan','Fe b','Mar','Apr', 'May','Jun','Ju l','Aug','Sep', 'Oct','Nov','De c');
// Full day names. Change this for local month names
Date.dayNames = new
Array('Sunday', 'Monday','Tuesd ay','Wednesday' ,'Thursday','Fr iday','Saturday ');
// Day abbreviations. Change this for local month names
Date.dayAbbrevi ations = new
Array('Sun','Mo n','Tue','Wed', 'Thu','Fri','Sa t');
// Used for parsing ambiguous dates like 1/2/2000 - default to preferring
'American' format meaning Jan 2.
// Set to false to prefer 'European' format meaning Feb 1
Date.preferAmer icanFormat = true;

// If the getFullYear() method is not defined, create it
if (!Date.prototyp e.getFullYear) {
Date.prototype. getFullYear = function() { var yy=this.getYear (); return
(yy<1900?yy+190 0:yy); }
}

// Parse a string and convert it to a Date object.
// If no format is passed, try a list of common formats.
// If string cannot be parsed, return null.
// Avoids regular expressions to be more portable.
Date.parseStrin g = function(val, format) {
// If no format is specified, try a few common formats
if (typeof(format) =="undefined" || format==null || format=="") {
var generalFormats= new Array('y-M-d','MMM d, y','MMM
d,y','y-MMM-d','d-MMM-y','MMM d','MMM-d','d-MMM');
var monthFirst=new Array('M/d/y','M-d-y','M.d.y','M/d','M-d');
var dateFirst =new Array('d/M/y','d-M-y','d.M.y','d/M','d-M');
var checkList=new
Array(generalFo rmats,Date.pref erAmericanForma t?monthFirst:da teFirst,Date.pr eferAmericanFor mat?dateFirst:m onthFirst);
for (var i=0; i<checkList.len gth; i++) {
var l=checkList[i];
for (var j=0; j<l.length; j++) {
var d=Date.parseStr ing(val,l[j]);
if (d!=null) {
return d;
}
}
}
return null;
}

this.isInteger = function(val) {
for (var i=0; i < val.length; i++) {
if ("1234567890".i ndexOf(val.char At(i))==-1) {
return false;
}
}
return true;
};
this.getInt = function(str,i, minlength,maxle ngth) {
for (var x=maxlength; x>=minlength; x--) {
var token=str.subst ring(i,i+x);
if (token.length < minlength) {
return null;
}
if (this.isInteger (token)) {
return token;
}
}
return null;
};
val=val+"";
format=format+" ";
var i_val=0;
var i_format=0;
var c="";
var token="";
var token2="";
var x,y;
var year=new Date().getFullY ear();
var month=1;
var date=1;
var hh=0;
var mm=0;
var ss=0;
var ampm="";
while (i_format < format.length) {
// Get next token from format string
c=format.charAt (i_format);
token="";
while ((format.charAt (i_format)==c) && (i_format < format.length)) {
token += format.charAt(i _format++);
}
// Extract contents of value based on format token
if (token=="yyyy" || token=="yy" || token=="y") {
if (token=="yyyy") {
x=4;y=4;
}
if (token=="yy") {
x=2;y=2;
}
if (token=="y") {
x=2;y=4;
}
year=this.getIn t(val,i_val,x,y );
if (year==null) {
return null;
}
i_val += year.length;
if (year.length==2 ) {
if (year > 70) {
year=1900+(year-0);
}
else {
year=2000+(year-0);
}
}
}
else if (token=="MMM" || token=="NNN"){
month=0;
var names =
(token=="MMM"?( Date.monthNames .concat(Date.mo nthAbbreviation s)):Date.monthA bbreviations);
for (var i=0; i<names.length ; i++) {
var month_name=name s[i];
if
(val.substring( i_val,i_val+mon th_name.length) .toLowerCase()= =month_name.toL owerCase())
{
month=(i%12)+1;
i_val += month_name.leng th;
break;
}
}
if ((month < 1)||(month>12)) {
return null;
}
}
else if (token=="EE"||t oken=="E"){
var names = (token=="EE"?Da te.dayNames:Dat e.dayAbbreviati ons);
for (var i=0; i<names.length ; i++) {
var day_name=names[i];
if
(val.substring( i_val,i_val+day _name.length).t oLowerCase()==d ay_name.toLower Case())
{
i_val += day_name.length ;
break;
}
}
}
else if (token=="MM"||t oken=="M") {
month=this.getI nt(val,i_val,to ken.length,2);
if(month==null| |(month<1)||(mo nth>12)){
return null;
}
i_val+=month.le ngth;
}
else if (token=="dd"||t oken=="d") {
date=this.getIn t(val,i_val,tok en.length,2);
if(date==null|| (date<1)||(date >31)){
return null;
}
i_val+=date.len gth;
}
else if (token=="hh"||t oken=="h") {
hh=this.getInt( val,i_val,token .length,2);
if(hh==null||(h h<1)||(hh>12)) {
return null;
}
i_val+=hh.lengt h;
}
else if (token=="HH"||t oken=="H") {
hh=this.getInt( val,i_val,token .length,2);
if(hh==null||(h h<0)||(hh>23)) {
return null;
}
i_val+=hh.lengt h;
}
else if (token=="KK"||t oken=="K") {
hh=this.getInt( val,i_val,token .length,2);
if(hh==null||(h h<0)||(hh>11)) {
return null;
}
i_val+=hh.lengt h;
hh++;
}
else if (token=="kk"||t oken=="k") {
hh=this.getInt( val,i_val,token .length,2);
if(hh==null||(h h<1)||(hh>24)) {
return null;
}
i_val+=hh.lengt h;
hh--;
}
else if (token=="mm"||t oken=="m") {
mm=this.getInt( val,i_val,token .length,2);
if(mm==null||(m m<0)||(mm>59)) {
return null;
}
i_val+=mm.lengt h;
}
else if (token=="ss"||t oken=="s") {
ss=this.getInt( val,i_val,token .length,2);
if(ss==null||(s s<0)||(ss>59)) {
return null;
}
i_val+=ss.lengt h;
}
else if (token=="a") {
if (val.substring( i_val,i_val+2). toLowerCase()== "am") {
ampm="AM";
}
else if (val.substring( i_val,i_val+2). toLowerCase()== "pm") {
ampm="PM";
}
else {
return null;
}
i_val+=2;
}
else {
if (val.substring( i_val,i_val+tok en.length)!=tok en) {
return null;
}
else {
i_val+=token.le ngth;
}
}
}
// If there are any trailing characters left in the value, it doesn't
match
if (i_val != val.length) {
return null;
}
// Is date valid for month?
if (month==2) {
// Check for leap year
if ( ( (year%4==0)&&(y ear%100 != 0) ) || (year%400==0) ) { // leap year
if (date > 29){
return null;
}
}
else {
if (date > 28) {
return null;
}
}
}
if ((month==4)||(m onth==6)||(mont h==9)||(month== 11)) {
if (date > 30) {
return null;
}
}
// Correct hours value
if (hh<12 && ampm=="PM") {
hh=hh-0+12;
}
else if (hh>11 && ampm=="AM") {
hh-=12;
}
return new Date(year,month-1,date,hh,mm,ss );
}

// Check if a date string is valid
Date.isValid = function(val,fo rmat) {
return (Date.parseStri ng(val,format) != null);
}

// Check if a date object is before another date object
Date.prototype. isBefore = function(date2) {
if (date2==null) {
return false;
}
return (this.getTime() <date2.getTime( ));
}

// Check if a date object is after another date object
Date.prototype. isAfter = function(date2) {
if (date2==null) {
return false;
}
return (this.getTime() >date2.getTime( ));
}

// Check if two date objects have equal dates and times
Date.prototype. equals = function(date2) {
if (date2==null) {
return false;
}
return (this.getTime() ==date2.getTime ());
}

// Check if two date objects have equal dates, disregarding times
Date.prototype. equalsIgnoreTim e = function(date2) {
if (date2==null) {
return false;
}
var d1 = new Date(this.getTi me()).clearTime ();
var d2 = new Date(date2.getT ime()).clearTim e();
return (d1.getTime()== d2.getTime());
}

// Format a date into a string using a given format string
Date.prototype. format = function(format ) {
format=format+" ";
var result="";
var i_format=0;
var c="";
var token="";
var y=this.getYear( )+"";
var M=this.getMonth ()+1;
var d=this.getDate( );
var E=this.getDay() ;
var H=this.getHours ();
var m=this.getMinut es();
var s=this.getSecon ds();
var yyyy,yy,MMM,MM, dd,hh,h,mm,ss,a mpm,HH,H,KK,K,k k,k;
// Convert real date parts into formatted versions
var value=new Object();
if (y.length < 4) {
y=""+(+y+1900 );
}
value["y"]=""+y;
value["yyyy"]=y;
value["yy"]=y.substring(2, 4);
value["M"]=M;
value["MM"]=Date.LZ(M);
value["MMM"]=Date.monthName s[M-1];
value["NNN"]=Date.monthAbbr eviations[M-1];
value["d"]=d;
value["dd"]=Date.LZ(d);
value["E"]=Date.dayAbbrev iations[E];
value["EE"]=Date.dayNames[E];
value["H"]=H;
value["HH"]=Date.LZ(H);
if (H==0){
value["h"]=12;
}
else if (H>12){
value["h"]=H-12;
}
else {
value["h"]=H;
}
value["hh"]=Date.LZ(value["h"]);
value["K"]=value["h"]-1;
value["k"]=value["H"]+1;
value["KK"]=Date.LZ(value["K"]);
value["kk"]=Date.LZ(value["k"]);
if (H > 11) {
value["a"]="PM";
}
else {
value["a"]="AM";
}
value["m"]=m;
value["mm"]=Date.LZ(m);
value["s"]=s;
value["ss"]=Date.LZ(s);
while (i_format < format.length) {
c=format.charAt (i_format);
token="";
while ((format.charAt (i_format)==c) && (i_format < format.length)) {
token += format.charAt(i _format++);
}
if (value[token] != null) {
result=result + value[token];
}
else {
result=result + token;
}
}
return result;
}

// Get the full name of the day for a date
Date.prototype. getDayName = function() {
return Date.dayNames[this.getDay()];
}

// Get the abbreviation of the day for a date
Date.prototype. getDayAbbreviat ion = function() {
return Date.dayAbbrevi ations[this.getDay()];
}

// Get the full name of the month for a date
Date.prototype. getMonthName = function() {
return Date.monthNames[this.getMonth()];
}

// Get the abbreviation of the month for a date
Date.prototype. getMonthAbbrevi ation = function() {
return Date.monthAbbre viations[this.getMonth()];
}

// Clear all time information in a date object
Date.prototype. clearTime = function() {
this.setHours(0 );
this.setMinutes (0);
this.setSeconds (0);
this.setMillise conds(0);
return this;
}

// Add an amount of time to a date. Negative numbers can be passed to
subtract time.
Date.prototype. add = function(interv al, number) {
if (typeof(interva l)=="undefined" || interval==null ||
typeof(number)= ="undefined" || number==null) {
return this;
}
number = +number;
if (interval=='y') { // year
this.setFullYea r(this.getFullY ear()+number);
}
else if (interval=='M') { // Month
this.setMonth(t his.getMonth()+ number);
}
else if (interval=='d') { // Day
this.setDate(th is.getDate()+nu mber);
}
else if (interval=='w') { // Weekday
var step = (number>0)?1:-1;
while (number!=0) {
this.add('d',st ep);
while(this.getD ay()==0 || this.getDay()== 6) {
this.add('d',st ep);
}
number -= step;
}
}
else if (interval=='h') { // Hour
this.setHours(t his.getHours() + number);
}
else if (interval=='m') { // Minute
this.setMinutes (this.getMinute s() + number);
}
else if (interval=='s') { // Second
this.setSeconds (this.getSecond s() + number);
}
return this;
}
--
Matt Kruse
http://www.JavascriptToolbox.com
http://www.AjaxToolbox.com

Apr 29 '06 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

2
2712
by: Mark | last post by:
I have an Access 2000 database that pulls a file in everyday via the TransferText method. The file is named "psjrnl 25-Sep-2003.txt" (the 25-Sep-2003 will change and have the current days date). My problem is I am trying to give a variable the file name and it just want work. The variable statement is as follows: PSFILENAME = "psjrnl " &...
8
2237
by: Ishbel Kargar | last post by:
Since upgrading from old laptop (Windows 98) to new laptop (Windows XP), my mail-merge letters are doing strange things with date formats. For instance, my reminder letter for lapsed subs carries the 'expiry' date as a merge field from the database, and this previously was shown as dd/mm/yy (UK format). Now it persists in showing as...
3
11571
by: Lyn | last post by:
Hi, I am developing a project in which I am checking for records with overlapping start/end dates. Record dates must not overlap date of birth, date of death, be in the future, and must not overlap existing records from the same table. I had this all working some time ago, but recently when I have gone back to do more testing, part of...
5
7681
by: Ian Davies | last post by:
Dear Access expert I am trying to use an mde application developed in Access2k with Access 2002. I get an Access error box: Function is not available.. Date() etc. Is Access 2002 back compatible if so how do I work around this date function problem? Ian
5
2289
by: Darrel | last post by:
I'm trying to check a few fields in my SQL query to ensure that they fall between a range (namly that today's date is greater than one field and less than another field.) This is what I have: ========================================= dim strCurrentDate as String = microsoft.VisualBasic.DateAndTime.Today().ToString("mm/dd/yyyy")
2
1522
by: Thomas Beyerlein | last post by:
I am binding dates to a textbox, the date is stored in SQL in a datetime field. When it gets bound it turns it into a long date (Sunday, Dec. 25 2005), in SQL when viewing the table it views as a shortdate. When inserted to SQL the datetimepicker format for the date is short. I have not had a problem with the formatting of a date to a textbox...
1
1709
by: zsolt | last post by:
Hi, I'm trying to convert a string to date by specifying the format. The value is like this: "03rd of April 2006". Now this is converted fine by using the following format: "dd\r\d \o\f MMMM yyyy". The problem is of course that the string can be 01st of..., 04th of etc., meaning that I can't use the "\r\d" format description for all...
6
5313
by: ar555 | last post by:
I have a page with two textfields for dates (dateFrom, dateTo) which user inputs from a small popup calendar. Dates are in dd/mm/yyyy format. When user clicks on submit button, function is called to validate these dates dateTo > date From dateTo <> dateFrom dateFrom > today I write a function , but..... function search() {
2
1735
by: siyoyok007 | last post by:
Hello, now i have two DTPicker, and one MS calendar, DTPicker1 is for the start date and DTPicker2 is for the end date. My problem is, how can i only enable only the date between DTPicker1 and DTPicker2..... in other word i want the MS Calendar only available for the specified date ( Date between DTPicker1 and DTPicker2)
0
7464
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main...
0
7656
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. ...
0
7805
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that...
1
7413
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For...
0
7751
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the...
0
5968
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then...
1
5323
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes...
0
3440
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
0
700
bsmnconsultancy
by: bsmnconsultancy | last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence can significantly impact your brand's success. BSMN Consultancy, a leader in Website Development in Toronto offers valuable insights into creating...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.