For Zoho services only


I'm currently part of a wider delivery team at Ascent Business Solutions, recognised as a leading Zoho Premium Solutions Partner in the United Kingdom.

Ascent Business Solutions support organisations with everything from targeted technical fixes through to full Zoho CRM implementations and long-term platform adoption. Working as a team rather than a one-person consultancy allows projects to move forward consistently, with access to the right skills at each stage.

The team I manage specialises in API integrations between Zoho and third-party finance and commerce platforms such as Xero, Shopify, WooCommerce, and eBay. Much of our work involves solving integration challenges that fall outside standard documentation, supporting new ideas, new sectors, and evolving business models.

Success is measured through practical outcomes and return on investment, ranging from scaling small operations into high-turnover businesses to delivering rapid gains through online payments, automation, and streamlined digital workflows.

If you are looking for structured Zoho expertise backed by an established consultancy, you can contact Ascent Business Solutions on 0121 392 8140 (UK), email info@ascentbusiness.co.uk, or visit https://www.ascentbusiness.co.uk.
Zoho Deluge: Today, Tomorrow, Day After but Skip Sunday

Zoho Deluge: Today, Tomorrow, Day After but Skip Sunday

What?
A very quick article with a snippet of code to get today's date, tomorrow's, and the day after's but it has to skip Sundays.

Why?
Wanting to create a schedule for availability over the next few days which needs to dynamically change. I am aware of the function .addBusinessDay() but that excludes Saturdays which my client still works on.

How?
We're going to get today's date, then use the .addDay(), check none of these are a Sunday, and move the next few days along:
copyraw
thisDate = '2021-10-30';
v_Today = thisDate;
v_Tomorrow = v_Today.addDay(1);
v_NextDay = v_Today.addDay(2);
if(v_Today.getDayOfWeek()==1)
{
	v_Today = v_Today.addDay(1);
	v_Tomorrow = v_Tomorrow.addDay(1);
	v_NextDay = v_NextDay.addDay(1);
}
//
if(v_Tomorrow.getDayOfWeek()==1)
{
	v_Tomorrow = v_Tomorrow.addDay(1);
	v_NextDay = v_NextDay.addDay(1);
}
//
if(v_NextDay.getDayOfWeek()==1)
{
	v_NextDay = v_NextDay.addDay(1);
}
info v_Today.toString("EEEE dd-MMM-yy");
info v_Tomorrow.toString("EEEE dd-MMM-yy");
info v_NextDay.toString("EEEE dd-MMM-yy");
//
// yields: 
// Saturday 30-Oct-21
// Monday 01-Nov-21
// Tuesday 02-Nov-21
  1.  thisDate = '2021-10-30'
  2.  v_Today = thisDate; 
  3.  v_Tomorrow = v_Today.addDay(1)
  4.  v_NextDay = v_Today.addDay(2)
  5.  if(v_Today.getDayOfWeek()==1) 
  6.  { 
  7.      v_Today = v_Today.addDay(1)
  8.      v_Tomorrow = v_Tomorrow.addDay(1)
  9.      v_NextDay = v_NextDay.addDay(1)
  10.  } 
  11.  // 
  12.  if(v_Tomorrow.getDayOfWeek()==1) 
  13.  { 
  14.      v_Tomorrow = v_Tomorrow.addDay(1)
  15.      v_NextDay = v_NextDay.addDay(1)
  16.  } 
  17.  // 
  18.  if(v_NextDay.getDayOfWeek()==1) 
  19.  { 
  20.      v_NextDay = v_NextDay.addDay(1)
  21.  } 
  22.  info v_Today.toString("EEEE dd-MMM-yy")
  23.  info v_Tomorrow.toString("EEEE dd-MMM-yy")
  24.  info v_NextDay.toString("EEEE dd-MMM-yy")
  25.  // 
  26.  // yields: 
  27.  // Saturday 30-Oct-21 
  28.  // Monday 01-Nov-21 
  29.  // Tuesday 02-Nov-21 

Note that Sunday is day 1 of the week. Saturday is day 7 of the week.

Here's the English ordinal bit I used:
copyraw
m_Ordinals = {1:"st",21:"st",31:"st",2:"nd",22:"nd",3:"rd",23:"rd"}; 
v_Day3_Ordinal = ifnull(m_Ordinals.get(v_NextDay.toString("d").toLong()),"th");
  1.  m_Ordinals = {1:"st",21:"st",31:"st",2:"nd",22:"nd",3:"rd",23:"rd"}
  2.  v_Day3_Ordinal = ifnull(m_Ordinals.get(v_NextDay.toString("d").toLong()),"th")
Then in my HTML table, I can use the headers:
copyraw
v_Day1_Header = "<p>Today<br /><b>" + v_Today.toString("EEEE") + "</b><br />" + v_Today.toString("MMMM") + "</p>";
v_Day2_Header = "<p>Tomorrow<br /><b>" + v_Tomorrow.toString("EEEE") + "</b><br />" + v_Tomorrow.toString("MMMM") + "</p>";
v_Day3_Header = "<p>" + v_NextDay.toString("d") + v_Day3_Ordinal + "<br /><b>" + v_NextDay.toString("EEEE") + "</b><br />" + v_NextDay.toString("MMMM") + "</p>";
  1.  v_Day1_Header = "<p>Today<br /><b>" + v_Today.toString("EEEE") + "</b><br />" + v_Today.toString("MMMM") + "</p>"
  2.  v_Day2_Header = "<p>Tomorrow<br /><b>" + v_Tomorrow.toString("EEEE") + "</b><br />" + v_Tomorrow.toString("MMMM") + "</p>"
  3.  v_Day3_Header = "<p>" + v_NextDay.toString("d") + v_Day3_Ordinal + "<br /><b>" + v_NextDay.toString("EEEE") + "</b><br />" + v_NextDay.toString("MMMM") + "</p>"

Generate a list of working dates given a number of days
So here's another scenario where you have a start date and you are asked to list the working days, 7 days after the start date. I'm aware of the method .workdaysList():
copyraw
date1='2022-07-21';
date2='2022-07-29';
info date1.workdayslist(date2);

// yields: Thu Jul 21 00:00:00 PDT 2022,Fri Jul 22 00:00:00 PDT 2022,Mon Jul 25 00:00:00 PDT 2022,Tue Jul 26 00:00:00 PDT 2022,Wed Jul 27 00:00:00 PDT 2022,Thu Jul 28 00:00:00 PDT 2022,Fri Jul 29 00:00:00 PDT 2022
  1.  date1='2022-07-21'
  2.  date2='2022-07-29'
  3.  info date1.workdayslist(date2)
  4.   
  5.  // yields: Thu Jul 21 00:00:00 PDT 2022,Fri Jul 22 00:00:00 PDT 2022,Mon Jul 25 00:00:00 PDT 2022,Tue Jul 26 00:00:00 PDT 2022,Wed Jul 27 00:00:00 PDT 2022,Thu Jul 28 00:00:00 PDT 2022,Fri Jul 29 00:00:00 PDT 2022 
But if I were to maintain the idea above and skip a selected day, I would write something like the following:
copyraw
//
// initialize list to hold valid appointment dates
l_AppointmentDates = List();
//
// initialize Start Date
v_GivenDate = '2022-07-21';
//
// setup list to loop through (= number of days)
l_NumberOfDays = {1,2,3,4,5,6,7};
//
// start with first date to add (check if it is a working day)
v_NextWorkingDay = v_GivenDate;
//
// loop through each day to set an appointment for
for each index v_Loop in l_NumberOfDays
{
	// skip if Sunday (add 1 day)
	if(v_NextWorkingDay.getDayOfWeek()==1)
	{
		v_NextWorkingDay = v_NextWorkingDay.addDay(1);
	}
	// skip if Saturday (add 2 days)
	else if(v_NextWorkingDay.getDayOfWeek()==7)
	{
		v_NextWorkingDay = v_NextWorkingDay.addDay(2);
	}
	// add to list of allowed dates
	l_AppointmentDates.add(v_NextWorkingDay);
	//
	// output and add 1 more day to loop 
	info v_NextWorkingDay.toString("EEEE") + " :: " + v_NextWorkingDay.toString("yyyy-MM-dd");
	v_NextWorkingDay = v_NextWorkingDay.addDay(1);
}
  1.  // 
  2.  // initialize list to hold valid appointment dates 
  3.  l_AppointmentDates = List()
  4.  // 
  5.  // initialize Start Date 
  6.  v_GivenDate = '2022-07-21'
  7.  // 
  8.  // setup list to loop through (= number of days) 
  9.  l_NumberOfDays = {1,2,3,4,5,6,7}
  10.  // 
  11.  // start with first date to add (check if it is a working day) 
  12.  v_NextWorkingDay = v_GivenDate; 
  13.  // 
  14.  // loop through each day to set an appointment for 
  15.  for each index v_Loop in l_NumberOfDays 
  16.  { 
  17.      // skip if Sunday (add 1 day) 
  18.      if(v_NextWorkingDay.getDayOfWeek()==1) 
  19.      { 
  20.          v_NextWorkingDay = v_NextWorkingDay.addDay(1)
  21.      } 
  22.      // skip if Saturday (add 2 days) 
  23.      else if(v_NextWorkingDay.getDayOfWeek()==7) 
  24.      { 
  25.          v_NextWorkingDay = v_NextWorkingDay.addDay(2)
  26.      } 
  27.      // add to list of allowed dates 
  28.      l_AppointmentDates.add(v_NextWorkingDay)
  29.      // 
  30.      // output and add 1 more day to loop 
  31.      info v_NextWorkingDay.toString("EEEE") + :: " + v_NextWorkingDay.toString("yyyy-MM-dd")
  32.      v_NextWorkingDay = v_NextWorkingDay.addDay(1)
  33.  } 
And if I were to skip Saturdays and Sundays, I could reduce the latter to:
copyraw
l_AppointmentDates = List();
v_GivenDate = '2022-07-21';
l_NumberOfDays = {1,2,3,4,5,6,7};
v_NextWorkingDay = v_GivenDate;
for each index v_Loop in l_NumberOfDays
{
	l_AppointmentDates.add(v_NextWorkingDay);
	info v_NextWorkingDay.toString("EEEE") + " :: " + v_NextWorkingDay.toString("yyyy-MM-dd");
	v_NextWorkingDay = v_NextWorkingDay.addBusinessDay(1);
}
  1.  l_AppointmentDates = List()
  2.  v_GivenDate = '2022-07-21'
  3.  l_NumberOfDays = {1,2,3,4,5,6,7}
  4.  v_NextWorkingDay = v_GivenDate; 
  5.  for each index v_Loop in l_NumberOfDays 
  6.  { 
  7.      l_AppointmentDates.add(v_NextWorkingDay)
  8.      info v_NextWorkingDay.toString("EEEE") + :: " + v_NextWorkingDay.toString("yyyy-MM-dd")
  9.      v_NextWorkingDay = v_NextWorkingDay.addBusinessDay(1)
  10.  } 

Category: Zoho Deluge :: Article: 319

Credit where Credit is Due:


Feel free to copy, redistribute and share this information. All that we ask is that you attribute credit and possibly even a link back to this website as it really helps in our search engine rankings.

Disclaimer: Please note that the information provided on this website is intended for informational purposes only and does not represent a warranty. The opinions expressed are those of the author only. We recommend testing any solutions in a development environment before implementing them in production. The articles are based on our good faith efforts and were current at the time of writing, reflecting our practical experience in a commercial setting.

Thank you for visiting and, as always, we hope this website was of some use to you!

Kind Regards,

Joel Lipman
www.joellipman.com