Hmmm.... When you want to display information on the visible viewport, wouldn't it be better to use the "true" begin and end of the axis? The position of the axis labels is not under your full control, and depending on the label density the first label may be placed after the first data point.
In order to get the "true" zoomed axis range you can call
Chart.CurrentExtent which is a rectangle structure with TDoublePoint records a and b at the left/bottom and right/top corners, respectively. There is also a LogicalExtent which does not consider Margins and data point labels; this is essentially the zoomed rectangle, but I think you need the CurrentExtent here. The begin and end of the x axis, therefore, can be determined like this:
procedure GetXAxisRange(Chart: TChart; out FirstX, LastX: double);
var
ex: TDoubleRect; // requires TAChartUtils in "uses"
begin
ex := Chart.CurrentExtent;
FirstX := ex.a.x;
LastX := ex.b.x;
end;
Of course, you still must convert FirstX and LastX to date/time strings as needed.
You can call this function in the OnExtentChanged event of the Chart.