You need to sign in to do that
Don't have an account?
sfadm sfadm
Hello,
I need to calculate hours between two DateTime objects in apex excluding non-working days and weekends. Here is my method:
Method
How do I change Saturday and Sunday to be non-working days, hence zero working hours?
Days between two DateTime values excluding weekends
Hello,
I need to calculate hours between two DateTime objects in apex excluding non-working days and weekends. Here is my method:
// calculate working hours between createdDate and completedDate private Integer calculateWorkingHours(Datetime createdDate, Datetime completedDate) { List<BusinessHours> bhList = [Select id From BusinessHours Where IsDefault=true]; if(bhList.size() == 0) { //If there is a problem to get hours from the BusinessHours database table return -1 return -1; } // Get id of used set of business hours String bhId = bhList.get(0).id; // Returns the difference in milliseconds between a start and end Datetime based on a specific set of business hours. System.debug('createdDate ' + createdDate); System.debug('completedDate ' + completedDate); Long businessMillis = BusinessHours.diff(bhId, createdDate, completedDate); //Convert milliseconds to hours System.debug('businessMillis ' + businessMillis); Integer bHours = (Integer)((businessMillis/1000)/60)/60; System.debug('bHours ' + bHours); return bHours; }And the data from the BusinessHours database table:
Method
BusinessHours.diff()is calculating the Saturday and Sunday such as 24 hours working days!
How do I change Saturday and Sunday to be non-working days, hence zero working hours?
Could you please check your business hours. If no hours is selected in your business hours for saturday and sunday then the time will not be calculated in BusinessHours.diff() and also holiday attached with business hours also exculded from calculation. To do so clear the content of Saturday and Sunday in respective business hours and save it.
Note: Only one business hours is default at a time hence it will be good if you use the name of the business hours in the query as shown below.
Select id From BusinessHours Where IsDefault=true and Name='Name of the business hour'
Thanks
All Answers
Could you please check your business hours. If no hours is selected in your business hours for saturday and sunday then the time will not be calculated in BusinessHours.diff() and also holiday attached with business hours also exculded from calculation. To do so clear the content of Saturday and Sunday in respective business hours and save it.
Note: Only one business hours is default at a time hence it will be good if you use the name of the business hours in the query as shown below.
Select id From BusinessHours Where IsDefault=true and Name='Name of the business hour'
Thanks
May I request you please refer the below link for reference.
- https://salesforce.stackexchange.com/questions/5354/days-between-two-datetime-values-excluding-weekends
Hope it will be helpful.Please mark it as best answer if the information is informative.so that question is removed from an unanswered question and appear as a proper solution.
Thanks
Rahul Kumar