You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript如何匹配时间、价格数组计算近30/60天等指定时间段均价

实现思路
  • 首先建立时间与价格的一一映射关系,同时将字符串格式的时间转换为可计算的日期类型
  • 确定统计基准时间:默认取时间数组中的最新时间,也可根据需求自定义基准时间
  • 计算时间阈值:将基准时间往前推你指定的天数(如30天、60天)得到阈值
  • 过滤有效数据:同时满足两个条件:1. 时间大于等于时间阈值;2. 价格不等于异常值-1
  • 计算平均值:有效价格总和除以有效数据条数,无有效数据时返回提示避免除以0报错
Python 实现代码
from datetime import datetime, timedelta

# 示例数据
time_arr = [
    '2021-01-14', '2021-02-08', '2021-02-16',
    '2021-02-16', '2021-02-17', '2021-02-22',
    '2021-02-26', '2021-02-28', '2021-04-07',
    '2021-04-25', '2021-04-26', '2021-05-10',
    '2021-05-11', '2021-05-13', '2021-05-15',
    '2021-05-16', '2021-05-24', '2021-06-09',
    '2021-06-14', '2021-06-14', '2021-06-17',
    '2021-06-19', '2021-06-20', '2021-07-15',
    '2021-07-17', '2021-07-17', '2021-07-19',
    '2021-07-19', '2021-08-02'
]
price_arr = [
    79999, 69999, 76641, 76506, 79999,
    69999, 64999, 69999, 79999, 72500,
    69999, 72500, 77449, 77433, 77684,
    79999, 69999, 79999, 69999,    -1,
    69999,    -1, 69999, 74999, 69999,
    74999, 69999, 74999, 64999
]

def calc_period_avg(days: int, base_time=None) -> float | str:
    # 转换时间数组为日期类型
    date_list = [datetime.strptime(t, '%Y-%m-%d') for t in time_arr]
    # 确定基准时间,默认取最新时间
    if not base_time:
        base_time = max(date_list)
    # 计算时间阈值
    threshold = base_time - timedelta(days=days)
    # 过滤有效数据
    valid_prices = []
    for date, price in zip(date_list, price_arr):
        if date >= threshold and price != -1:
            valid_prices.append(price)
    # 计算平均值
    if not valid_prices:
        return "当前时间段无有效价格数据"
    return sum(valid_prices) / len(valid_prices)

# 测试示例
if __name__ == '__main__':
    print("最近30天平均价格:", calc_period_avg(30))
    print("最近60天平均价格:", calc_period_avg(60))
示例运行结果
  • 最近30天平均价格:70499.0
  • 最近60天平均价格:71830.72727272728

内容的提问来源于stack exchange,提问作者Timmy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 16:06:02