Date field validation

Discussions about Forms Designer for SharePoint 2013 / 2016 and Office 365.
User avatar
Dmitry Kozlov
Site Admin
Posts: 1524
Joined: Thu Jun 07, 2012

27 Apr 2015

Hi,

The code from my previous message retrives a date-object based on both date and time. So you can use it to compare two date and time fields:

Code: Select all

function getHours(str) {
	var parts = str.split(' ');
	if (parts[1] == 'PM') {
		return parseInt(parts[0]) + 12
	}
	
	parseInt(parts[0])
}

var dt = fd.field('startDate').value();
var dateParts = dt[0].split('/');
var startDate = new Date(dateParts[2], dateParts[0]-1, dateParts[1], getHours(dt[1]), dt[2]);

dt = fd.field('endDate').value();
dateParts = dt[0].split('/');
var endDate = new Date(dateParts[2], dateParts[0]-1, dateParts[1], getHours(dt[1]), dt[2]);

alert(endDate > startDate);

davidnarramore
Posts: 76
Joined: Wed Jan 21, 2015

28 Apr 2015

Thank you so much Dimitry. This worked great! When would be the best time to do this validation? On submit? would that be fd.onsubmit( );

davidnarramore
Posts: 76
Joined: Wed Jan 21, 2015

28 Apr 2015

Thank you so much Dimitry. This worked great! When would be the best time to do this validation? On submit? would that be fd.onsubmit( );

User avatar
Dmitry Kozlov
Site Admin
Posts: 1524
Joined: Thu Jun 07, 2012

29 Apr 2015

Hi,

Yes, if you need to validate the fields before the submission, just put this code into onsubmit handler:

Code: Select all

function getHours(str) {
	var parts = str.split(' ');
	if (parts[1] == 'PM') {
		return parseInt(parts[0]) + 12
	}
	
	parseInt(parts[0])
}

fd.onsubmit(function() {
	var dt = fd.field('startDate').value();
	var dateParts = dt[0].split('/');
	var startDate = new Date(dateParts[2], dateParts[0]-1, dateParts[1], getHours(dt[1]), dt[2]);

	dt = fd.field('endDate').value();
	dateParts = dt[0].split('/');
	var endDate = new Date(dateParts[2], dateParts[0]-1, dateParts[1], getHours(dt[1]), dt[2]);

	if (endDate < startDate) {
		alert('End Date must be greater than Start Date.');
		return false;
	}
	
	return true;
});

davidnarramore
Posts: 76
Joined: Wed Jan 21, 2015

29 Apr 2015

When I put the code in the alert displays as expected. When I change the time so the endDate is greater than the startDate the alert continues to display.

User avatar
Dmitry Kozlov
Site Admin
Posts: 1524
Joined: Thu Jun 07, 2012

30 Apr 2015

Please, try to trace variables before the comparison. Also, ensure that you don't have JS-errors in the browser console.

Code: Select all

alert(endDate);
alert(startDate);
if (endDate < startDate) {
	alert('End Date must be greater than Start Date.');
	return false;
}

SpongeBen SquareJaw
Posts: 16
Joined: Mon Nov 24, 2014

20 May 2015

You need to fix the gethours function for this to work put in ; and retun

function getHours(str) {

var parts = str.split(' ');

if (parts[1] == 'PM') {

return parseInt(parts[0]) + 12;

}

return parseInt(parts[0]);

}

User avatar
Dmitry Kozlov
Site Admin
Posts: 1524
Joined: Thu Jun 07, 2012

21 May 2015

Exactly! Many thanks.

SpongeBen SquareJaw
Posts: 16
Joined: Mon Nov 24, 2014

22 May 2015

Actually, I have a correction to my correction. It seems if it is 12 PM and if you add 12 the value would be

24 so it would add a day. This should be solid now. For DateTime Comparison



function getHours(str) {

var parts = str.split(' ');

var partHour = 0;

if (parts[1] == 'PM') {

partHour = parseInt(parts[0])

if (partHour != 12){

return parseInt(parts[0]) + 12;

}

}

return parseInt(parts[0]);



}

Katy
Posts: 145
Joined: Wed Dec 02, 2015
Location: Canada

11 Oct 2016

I am checking if the date and time field is empty, but can't make it work, here is what i have after reading the above:

function getHours(str) {


var parts = str.split(' ');


if (parts[1] == 'PM') {


return parseInt(parts[0]) + 12;


}


return parseInt(parts[0]);


}




fd.onsubmit (function () {


var dt = fd.field('DueDate').value()

if (Boolean(dt[0])) {


var dateParts = dt[0].split('/');


var date = new Date(dateParts[2], dateParts[0]-1, dateParts[1], getHours(dt[1]), dt[2]);


alert('Fill out date');


}

return false;


}



return true;


});

Locked
  • Information
  • Who is online

    Users browsing this forum: No registered users and 2 guests