可直接用 localstorage 保存用户选中的时间范围,推荐使用 iso 8601 字符串格式(如"2024-03-01")存储起止日期,初始化时读取并应用到图表,用户操作后实时同步,注意时区、防抖及隐私模式降级处理。

可以直接用 localStorage 保存用户选中的时间范围(如起止日期或时间戳),下次打开页面时自动读取并应用到股票趋势图上。关键在于统一数据格式、注意时区处理,并在图表初始化和交互后及时同步。
存储时间区间:推荐用标准字符串格式
避免存 JS Date 对象(无法直接序列化),改用 ISO 8601 字符串(如 "2024-03-01" 或 "2024-03-01T00:00:00"),兼容性好、可读性强、便于排序和比较。
- 用户选择“近30天”可转为具体日期:
const start = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); localStorage.setItem('chartRange', JSON.stringify({ from: start.toISOString().split('T')[0], to: new Date().toISOString().split('T')[0] })); - 若使用日期选择器(如
<input type="date">),其value已是"YYYY-MM-DD"格式,可直接存:localStorage.setItem('chartRange', JSON.stringify({ from: inputFrom.value, to: inputTo.value }));
读取并应用到图表:初始化时优先检查本地值
页面加载后立即尝试从 localStorage 读取,解析成功则用于设置图表选项;失败或为空则回退到默认区间(如最近7天)。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 读取示例:
const saved = localStorage.getItem('chartRange'); const range = saved ? JSON.parse(saved) : { from: get7DaysAgo(), to: today() }; - 将
range.from和range.to传入图表库(如 ECharts 的dataZoom或时间轴过滤逻辑,或用于请求对应时间段的K线数据) - 同时反向同步表单控件(如填充日期输入框、激活对应按钮),保证界面状态一致
监听用户操作并实时更新存储
每当用户通过按钮、日历、滑块等修改时间范围,立刻调用 localStorage.setItem 持久化,无需等待页面卸载。
- 绑定事件示例:
document.getElementById('applyBtn').addEventListener('click', () => { localStorage.setItem('chartRange', JSON.stringify({ from: getDateFromInput('start'), to: getDateFromInput('end') })); renderChart(); }); - 注意防抖:如果时间选择器频繁触发(如拖拽时间轴),可加简单防抖(500ms),避免过度写入
- 清除逻辑:提供“恢复默认”按钮时,记得同时
localStorage.removeItem('chartRange')
兼容性与边界提醒
localStorage 是同源且无过期机制的,但需留意实际限制和潜在问题:
- 不同浏览器容量约 5–10MB,仅存轻量 JSON 完全够用;但不要存原始股票数据,只存参数
- 隐私模式下部分浏览器会禁用
localStorage,需包裹try/catch并降级(如用内存变量临时保持) - 跨设备不共享——这是预期行为,如需同步需搭配后端账户体系
- 时间字符串务必用 UTC 标准(
toISOString())或明确标注时区,避免用户本地时区导致前后端时间错位
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










