How to calculate total time spent on To Do issue excluding weekend?

I am having different workflow status e.g. ‘To Do’, ‘In Progress’ , ‘Done’ etc and I want scripts which will get time spent on each status of issue excluding weekend (Saturday and Sunday).I succeed to get for status ‘In Progress’ and ‘Done’ but unable to get for status ‘To Do’ as may be it is default status on issue creation.
Note : I am using Jira Script Runner to perform this operation
Thanks for your valuable reply.I am pasting my script here which is working fine for In progress status…by excluding weekends it is giving me correct time spent on status…I am trying the same for To Do status i.e.first status after issue creation …but not succeeding…can you please help me…
Eagerly Waiting for help…

My Code for In Progress status:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.history.ChangeItemBean
import java.util.concurrent.TimeUnit
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.bc.issue.IssueService.UpdateValidationResult
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.bc.issue.IssueService.IssueResult
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.issue.changehistory.ChangeHistoryManager
import com.atlassian.core.util.DateUtils
import com.atlassian.jira.issue.history.ChangeItemBean

def statusCode = [‘Done’,‘In Progress’,‘In testing’,‘In Implementation’,‘To Do’];

IssueManager im = ComponentAccessor.getIssueManager()

//MutableIssue issue = im.getIssueObject(‘TES-24’)

ChangeHistoryManager changeHistoryManager = ComponentAccessor.getChangeHistoryManager()

String myStatus = “In Progress”

List rt = [0L]

long curTime = System.currentTimeMillis();

changeHistoryManager.getChangeItemsForField(issue, “status”).reverse().each { ChangeItemBean item ->

item.toString == myStatus   

Calendar c1 = new GregorianCalendar()

c1.setTimeInMillis(item.created.getTime())

int iHolydayCnt = 0;

while(c1.getTimeInMillis() < curTime)
{
    c1.add(Calendar.DAY_OF_YEAR, 1)
    
    if((c1.get(Calendar.DAY_OF_WEEK).equals(Calendar.SATURDAY)) || c1.get(Calendar.DAY_OF_WEEK).equals(Calendar.SUNDAY) ) 
        ++iHolydayCnt;  
    //log.warn(iHolydayCnt)
}          
//convert to seconds for Duration
long timeDiff = curTime - item.created.getTime() - iHolydayCnt*(60*60*24*1000)

// def timeDiff = timeStart - timeEnd
if (item.fromString == myStatus) {
    rt << -timeDiff
}
if (item.toString == myStatus) {
    rt << timeDiff
}

}

def total = rt.sum()/1000 as Long
def mytotal =DateUtils.getDurationString(total)
log.warn(total)
log.warn(mytotal)
return mytotal ?: 0L

My code for To Do status:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.history.ChangeItemBean
import java.util.concurrent.TimeUnit
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.bc.issue.IssueService.UpdateValidationResult
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.bc.issue.IssueService.IssueResult
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.issue.changehistory.ChangeHistoryManager
import com.atlassian.core.util.DateUtils
import com.atlassian.jira.issue.history.ChangeItemBean

def statusCode = [‘Done’,‘In Progress’,‘In testing’,‘In Implementation’,‘To Do’];

IssueManager im = ComponentAccessor.getIssueManager()

//MutableIssue issue = im.getIssueObject(‘TES-24’)

ChangeHistoryManager changeHistoryManager = ComponentAccessor.getChangeHistoryManager()

String myStatus = “To Do”

List rt = [0L]
def createdDateDiff = System.currentTimeMillis() - issue.getCreated().getTime()
rt << createdDateDiff

long curTime = System.currentTimeMillis();

changeHistoryManager.getChangeItemsForField(issue, “status”).reverse().each { ChangeItemBean item ->

item.toString == myStatus   

Calendar c1 = new GregorianCalendar()

c1.setTimeInMillis(item.created.getTime())

int iHolydayCnt = 0;

while(c1.getTimeInMillis() < curTime)
{
    c1.add(Calendar.DAY_OF_YEAR, 1)
    
    if((c1.get(Calendar.DAY_OF_WEEK).equals(Calendar.SATURDAY)) || c1.get(Calendar.DAY_OF_WEEK).equals(Calendar.SUNDAY) ) 
        ++iHolydayCnt;  
    //log.warn(iHolydayCnt)
}          
//convert to seconds for Duration
long timeDiff = curTime - item.created.getTime() - iHolydayCnt*(60*60*24*1000)

// def timeDiff = timeStart - timeEnd
if (item.fromString == myStatus) {
    rt << -timeDiff
}
if (item.toString == myStatus) {
    rt << timeDiff
}

}

def total = rt.sum()/1000 as Long
def mytotal =DateUtils.getDurationString(total)
log.warn(total)
log.warn(mytotal)
return mytotal ?: 0L