I am not sure why you would need a trigger for this. I think workflow rules would work just fine.
We created date/time fields for each of our statuses for reporting on time between each status. You could create the same for each of yours.
After the fields are created, create your workflow rules to capture the change in status. When the status equals the value you want, populate the respective date/time field with Now().
Edit to include code, since I am unsure of how to format the comment to show this.
This is the part of the link in the comment below that shows how to track days, hours, and minutes.
IF(
Diff_c > 0 ,
TEXT( FLOOR( Diff_c ) ) & " days "
& TEXT( FLOOR( MOD( Diff_c * 24, 24 ) ) ) & " hours "
& TEXT( ROUND( MOD( Diff_c * 24 * 60, 60 ), 0 ) ) & " minutes",
""
)