Hey Creators!
It's time to learn something new and simplify your app development journey with Zoho Creator.
Requirement
Calculate business hours between two chosen date-time inputs.
Sample Use-case
In a Project Tracker application, the team lead selects the start and end dates while assigning tasks to team members, and the business hours are automatically calculated based on the shift hours.
Logic
Create a form (here, Add Task). Add two date-time fields and a number field to populate the business hours.
Configure a form workflow on user input of the End_Date_Time field and copy the code shown below. For ease of understanding, the code is split into four parts, followed by their explanation.
//Declare variables for start and end date-time inputs.
startDateTime = input.Start_Date_Time;
endDateTime = input.End_Date_Time;
//Declare shift details
shiftStartTime = "09:30:00 AM";
shiftEndTime = "06:30:00 PM";
shiftDurationInHours = 9;
//Defining calendar
weekends = {"Saturday", "Sunday"};
holidays = {};
Here, we declare variables by the names startDateTime and endDateTime for the start and end date-time inputs, respectively. Next, we define the shift timings and shift duration of a day in hours. Then, define all the non-working days. Here, we're only considering weekends, i.e., Saturday and Sunday.
- //Declarations
- shiftEndOnStartDate = toDateTime(startDateTime.tostring("dd-MMM-yyyy") + " " + shiftEndTime,"dd-MMM-yyyy hh:mm:ss a");
- shiftStartOnEndDate = toDateTime(endDateTime.tostring("dd-MMM-yyyy") + " " + shiftStartTime,"dd-MMM-yyyy hh:mm:ss a");
Next, we declare variables for the time when the shift ends on the starting day and when the shift begins on the ending day, respectively.
Here, shiftEndOnStartDate is created by combining the date part of StartDateTime and the time part of ShiftEndTime to get the shift end time of the starting day. To elaborate, it takes the start date and converts it into a string (startDateTime.tostring("dd-MMM-yyyy") ) and adds the previously defined shiftEndTime in the dd-MMM-YYY hh:mm:ss format. For instance, let's say the StartDateTime is 17-NOV-2024 at 12:30:00 PM, and the shift ends at 06:30:00 PM; the shiftEndOnStartDate will be 17-NOV-2024 at 06:30:00 PM.
Similarly, we calculate the date-time when the shift starts on the ending day and store it in the variable shiftStartOnEndDate.
Next, to calculate the business hours, we calculate the available hours on the start day with respect to the time chosen. - //Hours left on the start date
- hoursLeftOnStartDate = startDateTime.timeBetween(shiftEndOnStartDate);
- hoursLeftOnStartDateString = hoursLeftOnStartDate.toTime();
- hoursLeftOnStartDateInSeconds = hoursLeftOnStartDate.getprefix(":").toNumber() * 3600 + hoursLeftOnStartDate.getsuffix(":").getprefix(":").toNumber() * 60;
- hoursLeftOnStartDateInHours = hoursLeftOnStartDateInSeconds / 3600;
- //Hours left on the end date
- hoursLeftOnEndDate = shiftStartOnEndDate.timeBetween(endDateTime);
- hoursLeftOnEndDateInSeconds = hoursLeftOnEndDate.getprefix(":").toNumber() * 3600 + hoursLeftOnEndDate.getsuffix(":").getprefix(":").toNumber() * 60;
- hoursLeftOnEndDateInHours = hoursLeftOnEndDateInSeconds / 3600;
startDateTime.timeBetween(shiftEndOnStartDate) calculates the difference between the chosen date-time and the shift ending time on the same day.
toTime() returns the hoursLeftOnStartDate value in the date-time format specified in the application settings.
Then, we convert this time into seconds.
(A) hoursLeftOnStartDate.getprefix(":").toNumber() * 3600 takes the hours part, converts it to a number, and multiplies it by 3600 to get the time in seconds.
(B) hoursLeftOnStartDate.getsuffix(":").getprefix(":").toNumber() * 60 takes the minutes part, converts it to a number, and multiplies by 60 to get the time in seconds.
Both (A) and (B) are added to get the business time available on the starting day in seconds.
This value is later converted to hours and stored in the variable hoursLeftOnStartDateInHours.
The same process is repeated to calculate the business hours on the end date.
Next, we need to calculate the number of workdays between startDateTime and endDateTime.
- num_work_days = startDateTime.workDaysBetween(endDateTime,weekends,holidays);
- //Subtracting 1 to exclude the end date. The start date is excluded by default.
- total_business_hours = (num_work_days - 1) * shiftDurationInHours + hoursLeftOnStartDateInHours + hoursLeftOnEndDateInHours;
- input.Business_days = total_business_hours.round(1);
num_work_days returns the no.of working days between the starting day StartDateTime and EndDateTime, excluding the weekends and holidays declared earlier.
The workDaysBetween function excludes the start day by default. We also subtract one digit from the number of working days to exclude the end date.
Finally, to calculate the total_business_hours, multiply the number of working days between two given inputs (num_work_days - 1) by the shift hours (shiftDurationInHours) and add the remaining business time on the start date (hoursLeftOnStartDateInHours) and on the end date (hoursLeftOnEndDateInHours).
total_business_hours.round(1) returns the rounded-off value of the total business hours and populates it in the Business_Hours field.
That's all for this post.
Feel free to share your thoughts, queries, and ideas in the comment section below.
Thank you!
Recent Topics
Client Script: $Client.refresh({ triggerOnLoad: true }); not triggering onLoad Client Scripts
Hey friends! I'm trying to store a temporary var, refresh the page for the user, then check that temporary var and do some actions. Theoretically using the title's code: $Client.refresh({ triggerOnLoad: true }); should refresh the page and trigger on
Super Admin login to delete certain folders and passwords and clearing the trash folder, they are still appearing on my dashboard
Hi Zoho Team, I need help with an issue I've encountered. Despite using the Super Admin login to delete certain folders and passwords and clearing the trash folder, they are still appearing on my dashboard. I would like to understand why this is happening
Pulling Specific Products from Sales Orders in Books to a CRM Record
We currently process orders directly through our website (woocommerce) as well as through manual sales orders in zoho books. When an order comes through the website, all of the individual products from that order show up in the CRM record of that customer.
Automatically add a retainer to every estimate
Hi all, I've been trying to find a way to automatically add a retainer at a set % to every estimate we create and send. So far I haven't been successful, does anyone know of a way to do this? Thanks,
Clear String field based on the value of other field
Hello everyone, We would like to be able to clear a string field (delete whatever has been written and make it empty) when another field (picklist) is changed to a specific value. While I can empty other types of fields, I noticed that I can't do this
Custom Deal Name in Lead Conversion Mapping
I know there are ways to change the name of a Deal after conversion using a custom function, so no need to repost that information. I would like to see the CRM Improved with Deal Name Customisation and I think the Lead Conversion Mapping page would be
Within the Basic KPI component in Analytics, it is impossible to set "next" day range as a filter
Hi there, I am currently setting up a deal dashboard for the Sales team. While it is possible to filter deal records to show records that were created LAST X days only, it looks like a NEXT X days Closing date filter is not available. Would it be possible
Invoice status on write-off is "Paid" - how do I change this to "Written off"
HI guys, I want to write off a couple of outstanding invoices, but when I do this, the status of the invoices shows as "Paid". Clearly this is not the case and I need to be able to see that they are written off in the customer's history. Is there a way
For each loop with available time slots
I am very new to Deluge, and this question was unable to be answered by Zoho Creator tech support upon request. Task at hand: I have a Form with 4 fields: - Date Start - Date End - Dropdown: Time Start: contains time slots (12:00PM, 12:15PM, etc) - Dropdown:
Can we have Backorder Management ?
Can we have Backorder Management ?
Converting Amazon Sales Order to Invoice
Hi there, We need advice on the Amazon integration with Zoho Inventory. Now, we want to convert all the Sales orders synced from Amazon to Invoices. We want also to include and record the Amazon fees associated with the sales (Amazon fees, FBA fees, Cost of Advertising etc.) However, Sales order only captures the sales proceeds (Gross Sales) in Zoho Inventory. Does anyone currently work with Amazon and can suggest how to correctly process the sales and Amazon payments through Zoho Inventory and
Zoho Inventory | Can't uncheck/turn off Advance Tracking
Hi, I wanted to know if there's a way to turn off Advanced Tracking (such as Serial Number or Batch Tracking) for an item in Zoho Inventory. I’ve read that you might need to delete associated transactions and clear the opening stock to disable these features.
Landed Cost application to Vendor Bills from dropship Purchase Orders
When trying to apply a Landed Cost to a Vendor Bill generated from a dropship Purchase Order, the Landed Cost pop-up window generates a message that "Landed Cost cannot be applied to Bills from dropship Purchase Orders" when trying to save the landed
2 serial numbers for 1 item (Mac address and Serial number)
There is a way to track 2 serial number type for 1 Item. Ex: Some electronic devices have a MAC address and a serial number. I need to track those 2 numbers
Zoho Projects Roadshow, USA - 2024
Dear Users, We are happy to announce the Zoho Projects Roadshows 2024 in USA. This is an excellent opportunity to learn more about Zoho Projects and gain in-depth knowledge of the advanced features. Our team will also discuss industry specific solutions
[Zoho Writer Webinar] Tips on collaboration control in Writer
Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for the month of October 2023: Tips on collaboration control in Writer. This webinar will help you understand the various features available in Writer to control collaboration. We'll
[Zoho Writer Webinar] Working with tables in Zoho Writer
Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for the month of September 2023: Working with tables. This webinar will help you understand the various ways you can use tables to meet your specific needs. The webinar will take
[Zoho Writer Webinar] Customize Writer to suit your business process
Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for the month of August 2023: Customize Writer to suit your business process. This webinar will cover the various ways to customize Writer to streamline business processes and improve
Is there a way to print the dashboard?
I would like the capability of printing the dashboard - is that possible?
Workflows for Timesheet
Good day, Any way to have timesheet as triggers? I looked into Zoho Flow and into Zoho Project automation but no where can I have timesheet as a trigger. Basically, I would like to trigger something upon timesheet approval. Right now, the only way to
Linkedin - Recruiter System Connect
Hi there! Does anyone here know how to connect Zoho Recruit to Linkedin Recruiter via Recruiter System Connect?
[Webinar] A recap of Zoho Writer in 2024
Hi Zoho Writer users, We're excited to announce Zoho Writer's webinar for December 2024: A recap of Zoho Writer in 2024. This webinar will provide a recap of the features, enhancements, and integrations released in 2024 to enhance your productivity. There
Learn how to automate IT asset and incident management with Zoho Writer
Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for November 2024: Learn how to use Zoho Writer's fillable forms for IT asset and incident management. This webinar will focus on how Zoho Writer can help you automate your organization's
[Webinar] Learn how Zoho Writer can streamline your finance and admin operations
Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for October 2024: Streamlining finance and admin operations with Zoho Writer. This webinar will focus on how Zoho Writer can help you generate payslips and automate claim processes.
[Zoho Writer Webinar] Learn how Zoho Writer can enhance the productivity of sales teams
Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for August 2024: Streamlining sales operations with Zoho Writer. This webinar will focus on how Zoho Writer can help you create sales documents and automate sales routines. There
[Zoho Writer Webinar] Learn how to simplify your HR operations: Part 2
Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for July 2024: Learn how Zoho Writer can simplify your HR operations: Part 2. This webinar will focus on how Zoho Writer can help HR teams streamline and automate their entire hiring
[Zoho Writer Webinar] Learn how to simplify your day-to-day HR operations
Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for June 2024: Learn how Zoho Writer can simplify your day-to-day HR operations. This webinar will focus on how to automate your entire hiring process and generate various types of
[Zoho Writer Webinar] Use formulas and conditions in Zoho Writer's document automation
Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for May 2024: Learn how to use formulas and conditions in Zoho Writer. This webinar will focus on how to use formulas and conditions when automating document generation in Zoho Writer.
[Zoho Writer Webinar] Personalize Zoho Writer to suit your needs
Hi Zoho Writer users, We're excited to announce the Zoho Writer webinar for April 2024: Learn how to personalize Zoho Writer to suit your needs. This webinar will focus on how to easily customize Writer's features at the user and organization level for
How to refresh/update module fields in
Hi, I created a Workspace for CRM years ago. Since that time I've updated the layouts in several modules in CRM but Zoho Analytics displays the previous state fields only. How to refresh the module fields to reflect the actual state in Analytics? BR
Data update/pull from a specific field or module
Hi Team, Currently, if I need a data from a newly added field on a product like Zoho CRM, I need to refresh the whole module to get the new field. This is taking much time for the data to be visible. If the data pull/refresh can be granularized to fetch
Lookup field in User module cannot look up to custom modules!
Hi there, Expense has been great so far but it's sad to see that a simple thing such as allowing a lookup to custom modules from the Users module is not yet implemented. Hope to see this in the next release. Do you have any plan for that?
Trigger Zoho Cliq Channel Workflows for API Messages
Dear Zoho Cliq Team, I hope this message finds you well. We have noticed that reminders or messages posted to Zoho Cliq channels via the API do not trigger channel-based workflows. This limitation means that any bot configured with a participation handler
Webhook Trigger for New Messages in Cliq Channels
Hello, I would like to request a feature to enable webhook triggers when a new message is added to a Cliq channel. This functionality would allow us to seamlessly send important information from Cliq to other relevant systems. This webhook trigger can
Ability to Edit the "Current Job Title" dropdown field
Current experience/Issue: When a user (candidate) uploads resume to Zoho Recruit candidate portal, some fields are prefilled with the info from the resume/cv correctly. However, we've observed that; 1. the "Current Job Title" dropdown field is usually
I'm getting an "Invalid_scope" error, even though I used an access token generated with the correct scope.
I'm getting an "Invalid_scope" error, even though I used an access token generated with the correct scope. Here’s what I did in Postman: Generated the code to create an access token using the following URL: https://accounts.zoho.eu/oauth/v2/auth?scope=ZohoCampaigns.contact.UPDATE&client_id=<client_id>&response_type=code&access_type=offline&redirect_uri=https://1882-2-26-193-161.ngrok-free.app
Problem configuring/customizing sales pipeline steps
Hello, I have created several sales pipelines with different stages in them. Unfortunately I forgot to properly configure these steps (conversion probability, forecast category). How can I modify and customize all these steps? Thnak you by advance M
workflow for bounced email gets triggered, but email is status = opened
Hello, I have a workflow that sends me an email if outgoing email are bounced. Now I got some kind of this emails, but the corrosponding contacts have status = open at the email. Why this bounce-workflow is triggered? Reports > Email Reports > Bounce
Power of Automation :: Automatically start / pause / stop timer on task status update.
Hello Everyone, A Custom function is a user-written set of code to achieve a specific requirement. Set the required conditions needed as when to trigger using the Workflow rules (be it Tasks / Project) and associate the custom function to it. Requirement:-
Website Access Blocked (from one pc only) when attempting unattended access to any device
Hello From one of my laptops I cannot access any remote device using unattended access. A Zoho Assist error page didplays 'Website Access Blocked. See attached.
Next Page