export function getTimeFromXCoordinate(chart: IChartApi, xCoordinate: number, series?: SeriesApi): Time | null {
if (series) {
const time = getNearestSeriesTimeFromXCoordinate(chart, series, xCoordinate);
if (time !== null) {
return time;
}
}
return chart.timeScale().coordinateToTime(xCoordinate as Coordinate) ?? null;
}
function getNearestSeriesTimeFromXCoordinate(chart: IChartApi, series: SeriesApi, xCoordinate: number): Time | null {
const logical = chart.timeScale().coordinateToLogical(xCoordinate as Coordinate);
if (logical === null) {
return null;
}
const data = series.data() as readonly SeriesTimeItem[];
if (!data.length) {
return null;
}
const nearestIndex = clamp(Math.round(Number(logical)), 0, data.length - 1);
const item = data[nearestIndex];
return item?.time ?? null;
}