I don't have MySQL but here is what it looks like in Microsoft SQL Server Transact-SQL. This example handles the situation where there are no hours during the holiday and returns 00:00:00 for that case.
Declare @tb table (emp_name varchar(30),time_in DateTime, time_out DateTime);
insert into @tb (emp_name,time_in,time_out) values( 'Joey','2013-12-24 20:00:00','2013-12-25 04:30:00');
insert into @tb (emp_name,time_in,time_out) values( 'Not Joey','2013-12-24 20:00:00','2013-12-24 22:30:00');
insert into @tb (emp_name,time_in,time_out) values( 'Still Not Joey','2013-12-26 20:00:00','2013-12-26 22:30:00');
Declare @Holiday DateTime;
Set @Holiday = '2013-12-25 00:00:00'
select
emp_name,CAST(time_in as smalldatetime) As TimeIn,CAST(time_out as smalldatetime) as TimeOut,
DATEADD(
second,
DATEDIFF(second,time_in,time_out),
TIMEFROMPARTS(0,0,0,0,0)) as Total_Hours,
DATEADD(second,
IIF( DATEDIFF(second,
IIF(@Holiday > time_in,@Holiday,time_in),
IIF(DATEADD(Hour,24,@Holiday)< time_out,DATEADD(Hour,24,@Holiday),time_out))<0,0,
DATEDIFF(second,
IIF(@Holiday > time_in,@Holiday,time_in),
IIF(DATEADD(Hour,24,@Holiday)< time_out,DATEADD(Hour,24,@Holiday),time_out))),TIMEFROMPARTS(0,0,0,0,0)) as Holiday_Hours
from @tb
emp_name TimeIn TimeOut Total_Hours Holiday_Hours
Joey 2013-12-24 20:00:00 2013-12-25 04:30:00 08:30:00 04:30:00
Not Joey 2013-12-24 20:00:00 2013-12-24 22:30:00 02:30:00 00:00:00
Still Not Joey 2013-12-26 20:00:00 2013-12-26 22:30:00 02:30:00 00:00:00
Attempt at MySQL version (without benefit of MySQL database software):
select
emp_name,time_in,time_out,
DATE_ADD(TIMEFROMPARTS(0,0,0,0,0), INTERVAL TIME_TO_SEC(TIMEDIFF(time_out,time_in)) SECOND) as Total_Hours,
DATE_ADD(TIMEFROMPARTS(0,0,0,0,0), INTERVAL
IIF(
TIME_TO_SEC(TIMEDIFF(
IIF(
DATE_ADD('2013-12-25 00:00:00',INTERVAL 24 HOUR) < time_out,
DATE_ADD('2013-12-25 00:00:00',INTERVAL 24 HOUR),time_out
),
IIF('2013-12-25 00:00:00' > time_in,'2013-12-25 00:00:00',time_in)
)
)<0,0,
TIME_TO_SEC(
TIMEDIFF(
IIF(DATE_ADD('2013-12-25 00:00:00',INTERVAL 24 HOUR) < time_out,DATE_ADD('2013-12-25 00:00:00',INTERVAL 24 HOUR),time_out)
),
IIF('2013-12-25 00:00:00' > time_in,'2013-12-25 00:00:00',time_in)
)
) SECOND) as Holiday_Hours
from @tb