> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oddspapi.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 各项目的周期 - fulltime 与 result 的区别

> 理解 OddsPapi 各运动项目的 period 周期体系：什么时候 fulltime 是一个独立的事实，什么时候它与 result 完全等价，以及如何在不写死假设的前提下按 marketType 与 period 对盘口分组。

每个盘口和每条比分都带有一个 `period`。这套词汇是通用的、跨所有运动项目共享的——
`result`、`fulltime`、`p1`、`p1+p2`、`fulltime+overtime`、`p1g6`，以及另外两百多个取值。
完整清单见[枚举值 → period](/zh/api-reference/enumerations#period)。

本指南回答的是参考清单没有回答的问题：**某个运动项目究竟有哪些周期，
以及为什么足球有 `fulltime` 而 MMA 没有。**

***

## 两个整场周期

| 取值         | 含义                                           |
| ---------- | -------------------------------------------- |
| `result`   | 决定该赛事结果的比分——累计一切，包括加时、延长时间或点球大战。所有运动项目均始终提供。 |
| `fulltime` | 常规时间结束那一刻被定格的比分，**早于**任何仍可能改变它的阶段。           |

`result` 从不被保留、也从不需要推导。如果您只消费一个整场周期，请消费 `result`。

每个盘口都带有非空的 `period`。少数盘口的该字段在
[2026-10-01](/zh/changelog/index) 之前可能为空白，现已不会。

***

## 什么时候存在 `fulltime`？

<Note>
  **判定规则：** 问一句——*"这个运动项目是否存在一个明确的常规时间终点，
  并且在它之后还有一个仍能增加比分的阶段？"*

  **是** → `fulltime` 是一个独立的事实，两个周期上都会提供盘口。
  **否** → `fulltime` 与 `result` 只是同一个数字的两种叫法，因此只提供 `result`。
</Note>

足球正是这个周期存在的理由。一场杯赛 90 分钟 1–1、加时后 2–1，对"谁赢了"这个问题
有两个真正不同的答案：`fulltime` 是平局，`result` 是主队获胜。90 分钟 1X2 盘口
刻意排除了之后发生的一切，而这种排除本身就是产品。

### 判定依据不是"这个项目是否有时间限制"

这是最常见的误解。关键在于**边界之后是否还有计分阶段**，而不在于是否有计时器。

<AccordionGroup>
  <Accordion title="棒球——没有计时器，但存在 fulltime">
    棒球没有计时器，但它仍然有明确的常规时间终点——九局——
    并且之后的延长局还会继续得分。因此 `fulltime`（九局结束）与 `result`（含延长局）
    是两个不同的数字，两者都会提供。
  </Accordion>

  <Accordion title="MMA 与拳击——回合数固定，但没有 fulltime">
    这类比赛的回合数是固定的，所以看起来像是有时间限制。但最后一回合结束后，
    没有任何阶段会继续增加比分：裁判的判定只是*指出胜者*，并不会延长比赛。
    最后一回合结束时的比分**就是**最终结果。在这里提供 `fulltime` 只会是
    同一个数字的第二个标签，因此 MMA 与拳击的盘口只使用 `result`。
  </Accordion>

  <Accordion title="网球、斯诺克、飞镖——比赛结束即结束">
    这类打到目标分的项目根本不存在常规时间的分界。不存在某个比分尚属"临时"、
    之后还有阶段可能改变它的时刻——比赛就是直接结束。
    因此只有 `result`（以及 `p1`、`p2`…… 这些盘/局/回合周期）。
  </Accordion>
</AccordionGroup>

### 同时提供两个周期的运动项目

以下项目在常规时间之后存在计分阶段——加时、延长时间、点球大战、延长局或黄金球——
因此 `fulltime` 与 `result` 是不同的：

足球、篮球、棒球、美式足球、冰球、手球、橄榄球、板球、水球、五人制足球、
澳式足球、曲棍球、地板球、沙滩足球、芬兰棒球、长曲棍球、班迪球、卡巴迪、
硬地滚球式曲棍球、盖尔式足球、无板篮球、盖尔式板棍球、垒球、eSoccer、eBasketball——共 25 个项目。

其他所有项目——MMA、拳击、网球、飞镖、斯诺克、乒乓球、排球、壁球、羽毛球、冰壶、Padel、
高尔夫、自行车、田径、柔道、速度赛车、草地滚球、越野、沙滩排球、沙滩手球、
三人篮球，以及全部电竞项目——整场盘口都使用 `result`，根本不存在需要去查找的
`fulltime` 分组。

<Warning>
  请不要把这份清单写死。它只是当前上线的状态，而运动项目会不断新增。
  请直接读取盘口自身的 `period`；把"该项目没有 `fulltime`"当作一项观察结果，
  而不是一个常量。
</Warning>

***

## 关于足球的点球大战

足球是唯一一个把点球大战的比分并入 `result` 而非作为独立阶段上报的项目。
一场 1–1 后以 4–3 点球取胜的比赛，`fulltime` 记为 1–1，`result` 则包含点球大战。
其他会进入点球大战的项目则会单独上报该阶段。

这也是为什么 `penalties` 这个*比分*周期目前是累计值而非仅该阶段的值——
参见[枚举值 → period](/zh/api-reference/enumerations#period) 中的说明。

***

## 比赛内部的周期

除了两个整场取值之外，`period` 还用于标识各个赛段。`p1` 具体代表什么取决于项目，
而这正是采用通用词汇的意义所在：

| `p1` 代表   | 适用于                               |
| --------- | --------------------------------- |
| 半场        | 足球、橄榄球、手球                         |
| 节         | 篮球、美式足球                           |
| 盘         | 网球、排球、乒乓球                         |
| 地图        | Counter-Strike、Valorant、Dota、英雄联盟 |
| 局（inning） | 棒球、垒球                             |
| 节（period） | 冰球                                |

请使用赛事的 `expectedPeriods` 和 `periodLength` 来解释这些取值，
而不是按 `sportId` 分支判断。

组合赛段（`p1+p2` 在分节项目中即上半场，`p3+p4+overtime` 即含加时的下半场）
以及子周期网格（`p1g6` = 第 1 盘第 6 局，`p1r13` = 第 1 张地图第 13 回合）
遵循同样的原则。

***

## 在客户端对盘口分组

盘口以 `marketType` × `period` 为键。有两条规则能让这种分组保持稳定：

<Steps>
  <Step title="不要自行构造周期">
    不要假设某个项目一定提供 `fulltime`，也不要在查不到时回退到 `result`。
    如果一个盘口发布在 `result` 上，那它**就是**整场盘口——
    空的 `fulltime` 分组并不是缺失。
  </Step>

  <Step title="尽可能以 marketId 为锚">
    `marketId` 是固定的：它不会为某个盘口发生变化，也不会被复用。
    `marketType` 和 `period` 是描述性的，可能会被修正——
    [2026-10-01](/zh/changelog/index) 就是如此，当时 26 个运动项目的 `1x2`
    按照上述规则由 `fulltime` 改为 `result`。以 `marketId` 为键的客户端毫无影响；
    以 `marketType` × `period` 为键的客户端则需要重新分组。
  </Step>
</Steps>

周期词汇是**只增不减**的——新的运动项目会引入新的取值（电竞回合网格是最近的一批）。
遇到未知的 period 字符串请原样透传，而不要拒绝处理。

***

## 相关页面

<Columns cols={2}>
  <Card title="枚举值 → period" icon="list" href="/zh/api-reference/enumerations#period">
    period 取值的完整参考清单。
  </Card>

  <Card title="盘口覆盖" icon="table" href="/zh/coverage/markets">
    各运动项目提供哪些盘口类型，以及它们的周期范围。
  </Card>

  <Card title="串关与 SGP" icon="layer-group" href="/zh/api-reference/parlays">
    跨周期、跨赛事组合各关。
  </Card>

  <Card title="更新日志" icon="clock-rotate-left" href="/zh/changelog/index">
    注册表变更，包括周期修正。
  </Card>
</Columns>
