you should handle different situations:
1) there is no intersection. (for each vertex: z_axis > vertex.z) or (for each vertex: z_axis < vertex.z)
2) the triangle lies in the z=z_axis plane (for each vertex: z_axis = vertex.x). This is awkward for doubles but 0 or some powers of two or some nice binary fractions are represented precisely.
3) one vertex (let's call it P) is below and two vertices (Q, R) are above the z=z_axis plane (or vice versa)
here you'll be able to find the intersections. Your problem will be broken down to find intersection of line PQ and PR with the plane z=z_axis.
4) one or two vertices lie on the z=z_axis plane.
The intersections here are trivial, but they may still be computed the same way as in point 3.
Is it clear? You may start implementing...