# 运限 (/zh/docs/guide/concepts/horoscope)

六个时间层级各自算什么，同一格子的宫名为什么会变，童限怎么起，流耀与流年十二神从哪来。



*适合：所有人。代码在页尾*

本命盘一生不变，**运限**是把时间叠加到本命盘上得到的动态信息。
给一个目标日期，x-iztro 一次返回六个层级。

## 同一个格子，宫名会变 [#同一个格子宫名会变]

这是运限里最容易绕住人的一点，先说清楚：

运限解读要把运限所在的那一宫当作「这一步的命宫」，其余十一宫跟着重排。
所以**同一个格子，在本命盘上是财帛宫，在某个大限里可能就是命宫**。

每个运限层级都给出一份重排后的十二宫名，按盘上位置排列。
本命盘的宫名不受影响，两套并存 —— 读结果时要分清手上拿的是哪一套。

## 六个层级 [#六个层级]

| 层级 | 周期  | 依据                      |
| -- | --- | ----------------------- |
| 大限 | 十年  | 五行局起运虚岁 + 性别与年支阴阳定的行进方向 |
| 小限 | 一年  | 年支三合定起点，性别定方向           |
| 流年 | 一年  | 目标日期所在的农历年              |
| 流月 | 一月  | 目标日期所在的农历月              |
| 流日 | 一日  | 目标日期                    |
| 流时 | 一时辰 | 目标时辰索引                  |

大限与小限都是「按年龄推进」的，但规则完全不同，各走各的；
流年到流时则是「按日历推进」的。两套并行，共同构成一次查询的结果。

## 每个层级有什么 [#每个层级有什么]

除小限与流年外，每个层级的结构相同：

| 字段                                 | 含义                        |
| ---------------------------------- | ------------------------- |
| `index`                            | 该运限落在哪一个盘上位置（0–11，第一格是寅宫） |
| `name`                             | 层级名，按盘面语言翻译（「大限」「流年」……）   |
| `heavenly_stem` / `earthly_branch` | 该运限的干支                    |
| `palace_names`                     | 以该运限位置为命宫重排的十二宫名          |
| `mutagen`                          | 该运限干引发的四化星，顺序为禄、权、科、忌     |
| `stars`                            | 流耀在十二宫的分布，没有流耀的层级为空       |

小限额外带**虚岁**（`nominal_age`）。

流年额外带**流年十二神**：按流年支重起的岁前十二神与将前十二神。
这两组与本命盘上宫位自带的那两组是两回事 ——
本命的按出生年支起，流年的按目标年支起。

## 童限 [#童限]

大限从五行局决定的虚岁才开始（水二局 2 岁、火六局 6 岁）。
在此之前的年份不属于任何大限，这段时间用**童限**推算。

童限按虚岁取宫，口诀是「一命二财三疾厄，四妻五福六官禄」：

| 虚岁  | 1  | 2  | 3  | 4  | 5  |
| --- | -- | -- | -- | -- | -- |
| 童限宫 | 命宫 | 财帛 | 疾厄 | 夫妻 | 福德 |

表到虚岁 5 为止：起运最晚的是火六局，6 岁即入第一个大限，
所以虚岁 6 及以后不会再是童限——口诀里的「六官禄」用不上，也不存在循环。

当目标日期落在起运之前，大限字段返回的就是童限，层级名显示为「童限」。
字段结构不变，所以调用方不需要特殊处理，只在需要区分时看层级名。

## 流耀 [#流耀]

流年、流月等层级会带一批只在该层级存在的星，称为**流耀**
（运昌、运曲、运魁、运钺、运鸾、运喜、运禄、运羊、运陀、运马，
以及流年层的流昌、流曲……）。它们按十二宫分组存放。

星的所属层级字段标明它属于哪一层：本命星是 `origin`，大限流耀是 `decadal`，
流年流耀是 `yearly`。

## 分界点会改变结果 [#分界点会改变结果]

运限的干支与虚岁受两个配置开关影响：

* `horoscope_divide` 决定运限年按正月初一还是立春换年，以及流月按初一还是节气分界
* `age_divide` 决定虚岁按农历年跨年加一，还是过了生日才加一

在年初或生日前后查询时，这两个开关会直接改变返回的干支与虚岁。
详见 [Config 详解](/zh/docs/guide/guides/config)。

## 在代码里怎么取 [#在代码里怎么取]

运限从已排好的盘发起，出生参数、盘面语言与配置都从盘上取，只需给目标日期与时辰：

```python
h = chart.horoscope("2024-10-1", 0)
```

```rust
let h = astrolabe.horoscope("2024-10-1", 0)?;
```

```go
h, err := astrolabe.Horoscope("2024-10-1", 0)
```

读六个层级：

```python
h = chart.horoscope("2024-10-1", 0)

print(h.decadal.name, h.decadal.heavenly_stem + h.decadal.earthly_branch, h.decadal.mutagen)
print(h.age.name, "虚岁", h.age.nominal_age)
print(h.yearly.name, h.yearly.heavenly_stem + h.yearly.earthly_branch)
print("流年重排宫名:", h.yearly.palace_names)
print("流年岁前十二神:", h.yearly.yearly_dec_star.suiqian12)
```

```text
大限 庚辰 ['太阳', '武曲', '太阴', '天同']
小限 虚岁 25
流年 甲辰
流年重排宫名: ['夫妻', '兄弟', '命宫', '父母', '福德', '田宅', '官禄', '仆役', '迁移', '疾厄', '财帛', '子女']
流年岁前十二神: ['吊客', '病符', '岁建', '晦气', '丧门', '贯索', '官符', '小耗', '大耗', '龙德', '白虎', '天德']
```

遍历流耀：

```python
for palace_index, stars in enumerate(h.yearly.stars or []):
    for s in stars:
        print(palace_index, s.name, s.scope)
```

<Callout title="三侧读法一致">
  小限与流年各自多带一项专属数据（虚岁、流年十二神），Rust 里通用字段收在 `.base` 下，
  但两个类型都实现了 `Deref`，`h.yearly.heavenly_stem` 直接可读；序列化到 Python / Go 时
  这一层被展平，同样写 `h.yearly.heavenly_stem`。
</Callout>
