Zh-hans:Key:opening_hours

From OpenStreetMap Wiki
Jump to navigation Jump to search
opening_hours
说明
以标准格式描述某个设施何时开放或关闭。示例取值:Mo-Fr 08:00-17:00 编辑此说明
组: properties
URL 模式
https://openingh.openstreetmap.de/evaluation_tool/?EXP=$1
用于这些元素
可用于节点可用于路径可用于区域可用于关系
已记载的值: 2
常用组合
另见
状态:已批准Page for proposal
本页面由 AI 从英文页面翻译而来,内容需要人工复核。
许多编辑器提供了专门的界面,便于更方便地编辑这些数据;图中展示的是 StreetComplete 的 quest,正在编辑营业时间数据。

opening_hours=* 以标准格式描述某个设施何时开放或关闭。例如,opening_hours=Mo-Fr 08:00-17:00 表示周一至周五每天 8:00 至 17:00 开放。也可以记录复杂得多的情形。

Key:opening_hours/specification 是一份正式规范。Proposed features/Time domains 是一份历史文档,提供了更多背景信息。

如何标注

营业时间是一个属性,因此必须附着在已有对象上;例如 shop=*、amenity=*、tourism=*。几乎所有已知营业时间的对象都可以填写营业时间。语法相当复杂,但它能够表达甚至一些高度复杂的规则。

对大多数标注者而言,与其直接编辑标签取值,不如使用专门的工具,例如 JOSM 中的 OpeningHoursEditor 插件(可在偏好设置的插件菜单中添加)、Vespucci 的内置专用编辑器、Go Map!!、OsmAnd、Every Door、StreetComplete 的营业时间 quest,或 评估工具 以及 YoHours [1]网络工具。

这些工具可以用更友好的图形界面来构造将写入标签的营业时间文本。

请注意,某些工具如 Organic Maps[2]、CoMaps[3] 的界面对营业时间语法的理解非常有限,遇到较复杂的数据时会失败。

组合使用的标签

示例说明

工作日开放

示意图展示了如何使用连字符分隔范围中的第一个与最后一个星期几、在日期范围与时间区间之间留一个空格,并指出前导零是必需的。

星期几缩写为 2 个字母,如下:

Abbr. 星期
Mo 星期一
Tu 星期二
We 星期三
Th 星期四
Fr 星期五
Sa 星期六
Su 星期日

多个开放时间段

opening_hours= Mo-Fr 08:00-12:00,13:00-17:30

与上面相同,但 12:00 至 13:00(中午 12 点至下午 1 点)关闭

用不含空格的逗号 (,) 分隔两个开放的时间区间。

多天相同时间段

opening_hours= Mo,We 08:00-12:00

周一和周三 08:00 至 12:00 开放

用不含空格的逗号 (,) 分隔各个日期。

多天且多个时间段

opening_hours= Mo-Fr 08:00-12:00,13:00-17:30; Sa 08:00-12:00

与上面相同,另外周六上午也开放

分别为每个日期范围填写营业时间,用分号加一个空格 (; ) 分隔。

注意下面的#午夜之后关门。

节假日休息

opening_hours= Mo-Fr 08:00-12:00,13:00-17:30; Sa 08:00-12:00; PH off

与上面相同,但明确标注在公共假日/银行假日休息
  • 像使用星期几一样使用 PH。不用填写时间,而用 off 表示全天关闭。
  • 用 SH 表示学校假期。虽然很少见,但同一对象上也可以同时使用 PH 和 SH;例如 opening_hours=Mo-Fr 08:00-12:00,13:00-17:30; Sa 08:00-12:00; PH off; SH off

节假日不同时间

opening_hours= Mo-Fr 08:00-12:00,13:00-17:30; Sa 08:00-12:00; PH 09:00-12:00

在假日期间 09:00 至 12:00 开放

如前所述,PH 与星期几一样。由于它位于其余规则的右侧,因此会覆盖它们。关于哪些规则优先的更多信息,请参见这份更详尽的指南。

如果某个设施在学校假期的某些日期有不同的营业时间,可以用 SH 作为星期几的前缀:opening_hours=Mo-Fr 08:00-12:00,13:00-17:30; Sa 08:00-12:00; SH Mo-Sa 09:00-12:00(本例中的设施在学校假期期间周一至周六上午 9 点至中午 12 点开放,但在非学校假期期间营业时间不同。)

午夜之后关门

在某些情况下,场所会在午夜之后关门。例如周一 20:00 开门、午夜之后凌晨 2:00 关门,可以用以下方式标注——根据规范,这些都是有效的:

opening_hours= Mo 20:00-26:00

周一 20:00 开放,2:00 关闭 — 使用扩展小时语法
opening_hours= Mo 20:00-02:00

周一 20:00 开放,2:00 关闭 — 使用扩展小时语法

注意:这在某些校验器中可能会产生虚假的警告。

opening_hours= Mo 20:00-24:00, Tu 00:00-02:00

周一 20:00 开放。周二 2:00 关闭。—— 把周二的那一段单独标注

注意:

opening_hours= Mo 20:00-26:00; Tu 20:00-24:00

周一和周二 20:00 开放,午夜关闭。(!)

因为后面的规则会使前面的规则被忽略,周二的规则会覆盖周二 0:00 至 2:00 开放的那一段。请务必使用逗号而不是分号来扩展规则!一般来说,使用逗号几乎总是更好的选择。

基于月份的例外

请记住,后面的规则会覆盖前面的规则。

要描述每个月某个星期几的第 n 次出现:

opening_hours= Mo 08:00-16:00; Mo[2] 08:00-12:00

每周一 8:00 至 16:00 开放,但每月第二个周一 8:00 至 12:00 开放。

要描述每个月某个星期几倒数第 n 次出现:

opening_hours= Mo 08:00-16:00; Mo[-2] 08:00-12:00

每周一 8:00 至 16:00 开放,但每月倒数第二个周一 8:00 至 12:00 开放。

要描述某个月份的所有日期:

opening_hours= Mo 08:00-16:00; Dec off

每周一 8:00 至 16:00 开放,但 12 月休息。

月份缩写为其名称的前三个字母:Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec。

要描述某个月份中的某一天:

opening_hours= Mo-Fr 08:00-16:00; Dec 12 off

周一至周五 8:00 至 16:00 开放,但 12 月 12 日休息。

月份可以与星期几组合。

opening_hours= Mo 08:00-16:00; Dec Mo 08:00-12:00

每周一 8:00 至 16:00 开放,但在 12 月每周一 8:00 至 12:00 开放

月份同样也可以互相组合或跨月表示,与星期几类似。

opening_hours= Mo 08:00-16:00; Jan-Mar Mo 08:00-12:00

每周一 8:00 至 16:00 开放,但在 1 月至 3 月每周一 8:00 至 12:00 开放

取值

对于 way 可通行的路径,请参见本文中的公路上营业时间的当前使用情况以及 access。

示例

  • 24/7
    适用于:任何不停业(全天候营业)的设施(相关标签),一周 7 天、每天 24 小时
    地图渲染:类似对象图标加一个 24
    (注意:关于 "24/7" 是否包含公共假日似乎存在一些[分歧](https://github.com/streetcomplete/StreetComplete/issues/5355#issuecomment-1804225354),因此更安全的做法是显式标注,例如 "Mo-Su,PH 00:00-24:00" 或 "Mo-Su 00:00-24:00; PH off")
  • Sa-Su 00:00-24:00
    适用于:仅周末开放但仍不停业,24 小时
  • Mo-Fr 08:30-20:00,或对于更复杂的营业时间:
    Mo 10:00-12:00,12:30-15:00; Tu-Fr 08:00-12:00,12:30-15:00; Sa 08:00-12:00
    Mo-Su 08:00-18:00; Apr 10-15 off; Jun 08:00-14:00; Aug off; Dec 25 off
    适用于:任何有营业时间的设施(相关标签)
    地图渲染:什么都不显示,信息由软件获取
  • Mo-Sa 10:00-20:00; Tu off 或 Mo-Sa 10:00-20:00; Tu 10:00-14:00
    用于一段日期范围中的例外情况
    适用于:任何有营业时间的设施(相关标签)
    地图渲染:什么都不显示,信息由软件获取
  • Tu-Fr 10:00-16:00, Mo 08:00-18:00 open "limited service", Tu-Fr 08:00-10:00 open "limited service", Tu-Fr 16:00-18:00 open "limited service"
    Mo-Fr 08:00-18:00 open "limited service", Tu-Fr 10:00-16:00
    Tu-Fr 10:00-16:00 _chipTab_ Mo-Fr 08:00-18:00 open "limited service"
    Tu-Fr 10:00-16:00 open "all services"
    _chipTab_ Mo-Fr 08:00-18:00 open "limited service"
    周一至周五 8 点至 18 点开放,在核心时段之外提供有限服务(周一,以及周二至周五 10 点之前和 16 点之后)。这四个示例给出的营业时间相同。第一个示例使用逗号记法(",")向核心时段添加时间。第二个示例使用逗号记法覆盖部分时间段。另两个示例使用竖线("||")来添加核心时段之外的时间。
  • sunrise-sunset
    适用于:每天日出至日落之间开放
    使用圆括号来加上时间偏移,例如某个公园在日出后 2 小时开放、日落前 2 小时关闭:(sunrise+02:00)-(sunset-02:00)
  • dawn-dusk
    从黎明开放到黄昏(给定日期的当地时间)
  • dawn-sunrise, sunset-dusk
    从黎明开放到日出、从日落开放到黄昏(给定日期的当地时间)
  • Su 10:00+
    周日 10:00 直至未知或未指明的关门时间。
    适用于:任何有营业时间的设施(相关标签)
    地图渲染:什么都不显示,信息由软件获取
  • Apr-Oct: Fr-Su 10:00-18:00
    周五至周日 10:00 至 18:00 开放,但仅在 4 月至 10 月之间。
  • May Mo[-1] -2 days-Sep Mo[1]: Sa-Su 10:00-18:00
    周末 10:00 至 18:00 开放,但仅从阵亡将士纪念日周末(5 月最后一个周一之前的那个周六)到劳动节(9 月的第一个周一)
  • week 01-14 Mo-Su 10:00-17:00
    第 1 周至第 14 周,周一至周日 10 至 17 点开放
  • week 01-53/2 Fr 09:00-12:00; week 02-52/2 We 09:00-12:00
    奇数周的周五以及偶数周的周三 09:00 至 12:00 开放
    适用于:任何有营业时间的设施(相关标签)
    地图渲染:什么都不显示,信息由软件获取
  • 10:30-19:00; Jan 01-31/2,Feb 01-29/2,Mar 01-31/2,Apr 01-30/2,May 01-31/2,Jun 01-30/2,Jul 01-31/2,Aug 01-31/2,Sep 01-30/2,Oct 01-31/2,Nov 01-30/2,Dec 01-31/2 07:30-13:30; Su 10:00-13:00; Sa off
    偶数日 10:30 至 19:00 开放,奇数日 7:30 至 13:30 开放,周日 10:00 至 13:00 开放,周六休息
  • Mo-Sa 08:00-13:00,14:00-17:00 || "by appointment"
    这里就派上了回退规则的用场。它适用于前面规则未处理到的任何时间。
  • Su-Tu 11:00-01:00, We-Th 11:00-03:00, Fr 11:00-06:00, Sa 11:00-07:00
    由于后面的规则会覆盖前面的规则这一设定,跨越午夜的时间必须使用额外的规则来表示,并且这些规则之间用逗号而不是分号分隔。
  • Mo 11:00-14:00; Tu-Fr 11:00-14:00, 18:00-22:00; Sa 18:00-22:00
    Mo-Fr 11:00-14:00, Tu-Sa 18:00-22:00
    午餐时段周一至周五开放,晚餐时段周二至周六开放。这两个示例给出的营业时间相同。第二个示例对重叠的日期使用逗号记法(",")。
  • Mo-Th 18:00-01:00, Fr-Sa 18:00-03:00
    Mo 18:00-24:00; Tu-Fr 00:00-01:00, 18:00-24:00; Sa 00:00-03:00, 18:00-24:00; Su 00:00-03:00
    周一至周六 18 点开放,凌晨 1 点关门,周五/周六除外(至凌晨 3 点)。这两个示例给出的营业时间相同。第一个示例对重叠的日期使用逗号记法(",")。
  • Mo-Fr 08:00-12:00, We 14:00-18:00
    Mo-Fr 08:00-12:00; We 08:00-12:00,14:00-18:00
    周一至周五上午以及周三下午开放。这两个示例给出的营业时间相同。第一个示例对重叠的日期使用逗号记法(",")。第二个示例使用分号,并覆盖了周三的 "Mo-Fr" 范围。
  • Mo-Su,PH 15:00-03:00; easter -2 days off
    每天(包括公共假日)都开放,但耶稣受难日休息。
  • easter-7days - Nov 01: Tu-Sa 10:00-12:00,13:30-17:00; easter-7days - Nov 01: Su,PH 11:00-17:00
    从棕枝主日至诸圣节开放,周日/公共假日的时间不同。此示例在 openingh 上校验失败(2026 年 8 月)。
  • Dec 11-Dec 17: Su 10:00-17:00
    在第三个将临期主日(不会早于 12 月 11 日,也不会晚于 12 月 17 日)上午 10:00 至下午 5:00 开放。
  • Mo-Fr 09:00-12:30,13:30-17:00; PH -1 day 09:00-12:30; Sa-Su,PH off
    周一至周五 9:00 至 12:30 以及 13:30 至 17:00 开放,但公共假日的前一个工作日除外;周末和公共假日休息。
  • Tu-Sa 09:00-17:00; PH-2days Sa off; PH-1day Sa off; PH off
    周二至周六开放。公共假日所在周末的周六休息(部分公共假日落在周一)。此示例在 openingh 上校验失败(2026 年 8 月)。
  • Jan 20, Feb 20, Mar 20, Apr 20, May 20, Jun 20, Jul 20, Aug 20, Sep 20, Oct 20, Nov 20, Dec 20 09:00-10:00
    每月 20 日 9 点至 10 点
  • Mo-Fr 12:00-14:00 "winter"
    冬季期间在工作日的午餐时段开放。如果冬季的时间范围已定义(月份、月-日、日期、周数等),则优先使用那种方式。
  • Mo-Sa open, Mo-Fr 17:00+ closed, Sa 12:00+ closed; Su,PH off
    周一至周六开放,17 点关门,周六除外(中午 12 点关门)。
  • 2026 Dec 01-2026 Dec 23
    今年 12 月 1 日至 23 日开放。
  • closed; 2026 Oct 01-2026 Dec 31: Mo-Fr 09:00-17:00
    目前周一至周五 9 点至 17 点开放,但在年末关闭。
  • 更多示例请查看[评估工具](https://openingh.openstreetmap.de/evaluation_tool/)以及 opening_hours.js 的[文档](https://github.com/opening-hours/opening_hours.js#features)。

语法概要

这是一份覆盖大多数情况的概要。它的目的是让人能很快写出大多数营业时间标签,而不是解释完整语法。对于更复杂的情况,请参阅本节下方的文字、完整规范以及更多说明。

你可以用[评估工具](https://openingh.openstreetmap.de/evaluation_tool)检查自己的组合,或者使用更简单的 YoHours 应用(YoHours 不支持该语法的高级特性[1])。

图例
code 要么就字面写成 code(在需要处包含一个字面空格分隔符  ;语法中其他位置的空格仅用于排版显示);
element 要替换为下面以 element: 开头的那一行所定义语法的 element;
item... 表示 item 可以按需重复。
[ sequence of items ] 表示 sequence of items 是可选的;
| 表示必须从若干个(以该符号分隔的)项目序列中选择一个;
通用语法
opening_hours= rulesets [ ; rulesets ]...
依次计算每个 ruleset,下一个 ruleset 可能会覆盖前面若干个 ruleset 中已匹配到的初始开/关状态。
rulesets: rule [ || rule ]...
依次计算每个 rule,直到它在指定的日期或时间上匹配为止,否则 ruleset 中的下一个 rule 只会作为回退被检查。
rule: range [ status ] [ comment ]
range: [ years ] dates [   times ] | times | 24/7
指定可选年份的语法
years: year_range [ , year_range ]...
year_range: year [ - year | + ] [ / n ]
可以指定一个 n 年的可选周期,用于从第一个指定 year 开始的范围内的年份。
year: 公历中的 4 位年份数字。
指定日期的语法(可含可选时间
dates: monthly | weekly | daily | variably | holidays
monthly: monthdays [   weekdays ]
weekly: [ week   week_range [ , week_range ]...   ] weekday_range [ , weekday_range ]...
daily: months [   monthdays [ , monthdays ]... ]
variably: variable_date [ - variable_date ]
months: Mth [ -Mth ]
monthdays: dd [ -dd ]
week_range: ww [ - ww | + ] [ / n ]
可以指定一个 n 周的可选周期,用于从第一个指定周数 ww 开始的范围内的周。
weekdays: weekday_range [ , weekday_range ]... | Wd[ n [ , n ]... ]
星期几后面可以跟序号,从月初起正向计数,或从月末起负向计数:
例如 Mo-Fr 08:00-09:00,或 Mo[1,3] 08:00-09:00;
例如 Su[1] 表示当月的第一个星期日,Su[-1] 表示当月的最后一个星期日。
weekday_range: Wd [ - Wd ]
ww: 01-53 范围内的 2 位周数(在 ISO 年中),例如 week 25 Mo 08:30-20:00
dd: 01-31 范围内的 2 位月内日期数,例如 Dec 25
Mth: Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec
3 个字母的英文月份缩写,例如 Dec 25
Wd: Mo | Tu | We | Th | Fr | Sa | Su
2 个字母的英文星期缩写,例如 Fr 08:30-20:00
yearly_fest: easter
目前唯一可指定的可变年度节日是复活节(假定使用基督教的公历)。
variable_date: yearly_fest [ sign n days ],例如 easter -2 days 08:00-17:00 表示耶稣受难日的营业时间,或 easter +49 days 08:00-17:00 表示五旬节(圣灵降临节)的营业时间。
holidays: PH [ sign n days ] | SH
公共假日(取决于位置,需要按国家/地区提供数据);学校假期(取决于位置,需要按学区提供数据)。
指定时间的语法
times: time_range [ , time_range ]...
time_range: time [ - time | + ]
可用来代替 "late" 或 "until last customer",例如 12:00+。
time: fixed_time | variable_time
fixed_time: HH : mm
variable_time: event | ( event offset_time )
event: dawn | sunrise | sunset | dusk
请注意,日落与日出的时间需要地理位置信息来计算太阳的角高度,以及可观测地平线的角高度(后者也取决于海拔)。它们可以在建模大地水准面的海平面高度上近似取值,或者按当地时间粗略估计(视国家和时区而定)。
offset_time: sign hh : mm
hh: 00-48 范围内的相对 2 位小时数,例如 (sunrise+01:00)-12:00。
HH: 00-23 范围内的绝对 2 位小时数(日内 24 小时制,不含 am/pm),例如 Fr 08:30-20:00。
mm: 00-59 范围内的 2 位分钟数(每小时之内),例如 Fr 08:30-20:00。
用于微调日期和时间的其他通用语法元素
sign: + | -
n: 一个正整数。
可选修饰符的语法
status: unknown | open | closed | off
unknown:初始的开或关状态,但后续那些会覆盖它的日期和时间除外(也可用于覆盖此前明确给出的开或关状态);
open:在指定的日期和时间开放(若未给出时间则永久开放),但后续那些会覆盖它的日期和时间除外;
closed 或 off:在指定的日期和时间关闭(若未给出时间则永久关闭),但后续那些会覆盖它的日期和时间除外;
在标签值的第一个 ruleset 的每个 rule 中(包括回退规则),如果 status 没有随指定的 range 明确给出,则假定其含义为 open(除非存在针对它的 comment),并且所有其他未指定的日期和时间都保持为 unknown。由此得到的日程随后会被每一个后续的 ruleset 依次修改。
comment: "text"
一段简短注释(用 " 包裹但其中不含 "),用于说明适用的限制或条件,例如 "children only"、"limited service" 或 "reservation by phone",reservation=*。
该注释用于在应用软件中显示,而不是被自动解析。注释中使用的语言并不由标签值本身规定,但可以通过键名中带有语言代码后缀的标签来指定(出于本地化目的)。

语法

  • wd 星期几,可用:Mo · Tu · We · Th · Fr · Sa · Su Fr 08:30-20:00
  • hh 小时,始终是以 24 小时制表示的两位数字(不含 am/pm),格式为 "hh:mm" · Fr 08:30-20:00
  • mm 分钟,始终是两位数字,格式为 "hh:mm" Fr 08:30-20:00
  • mo 月份,可用:Jan · Feb · Mar · Apr · May · Jun · Jul · Aug · Sep · Oct · Nov · Dec · "mo md" Dec 25
  • md 月内日期,始终是两位数字,格式为 · "mo md" Dec 25
  • we 周数,始终是 01-53 范围内的两位数字,格式为 "week we" week 25 Mo 08:30-20:00
  • SH 学校假期。对于非母语英语使用者,请注意它同时也包括暑假,因此并不限于学年中的假期。 Mo-Fr 08:00-09:00,14:00-15:00; SH off[4]
  • PH 公共假日,可用于表示公共假日期间不同的营业时间 Mo-Fr 09:00-17:00; PH 10:00-12:00; PH Su off[4]
上面的例子表示正常营业时间为周一至周五上午 9 点至下午 5 点,但在公共假日为上午 10 点至中午 12 点,落在星期日的公共假日除外。

取值的通用语法为:hh:mm-hh:mm 08:30-20:00

取值的通用语法为:wd hh:mm-hh:mm Fr 08:30-20:00

取值的通用语法为:mo md: hh:mm-hh:mm Dec 25: 08:30-20:00 如 Key:opening_hours/specification 中所述,冒号是可选的。

取值的通用语法为:mo-mo: wd hh:mm-hh:mm Jun-Aug: Su 10:30-16:00 用于指定 6 月、7 月和 8 月中周日的开放时间。如 Key:opening_hours/specification 中所述,冒号是可选的。

取值的通用语法为:week we: wd hh:mm-hh:mm week 25: Mo 08:30-20:00 如 Key:opening_hours/specification 中所述,冒号是可选的。

规则

  • 连续的小时[始终需要开-闭]用 "-" 分隔 · 08:30-20:00
  • 连续开放的星期几用 "-" 分隔 · Mo-Fr
  • 连续开放的月内日期用 "-" 分隔 · Dec 20-26 或 Dec 20-Jan 06
  • 在一段连续的月内日期范围内以 "n" 为周期开放,该范围之后跟 "/n" 02-30/n
  • 连续开放的周用 "-" 分隔 · week 01-26
  • 在一段连续的周范围内以 "n" 为周期开放,该范围之后跟 "/n" week 02-52/n
  • 中断的日期用 "," 分隔 · Mo,We,Fr
  • 中断的时间用 "," 分隔 · 08:30-14:00,16:30-20:00
  • 不同日期上的不同时间可以用 ","(追加)或 ";"(覆盖)分隔 Mo-Sa 13:30-15:00,17:00-20:00, Tu-Sa 08:00-12:00; Th 11:00-16:00,17:00-19:00
读作:这些日期的这些营业时间,这些日期的这些营业时间;但是这些日期的这些营业时间。
  • 某个星期几休息将标注为 "wd off" Tu off
  • 一段星期几休息将标注为 "wd-wd off" Tu-Th off
  • 某个月份休息将标注为 "mo off" Aug off
  • 一段月份休息将标注为 "mo-mo off" Aug-Sep off
  • 某个月份中的某一天休息将标注为 "mo md off" Dec 25 off
  • 一段月内日期休息
    • "mo md-md off" Dec 24-26 off
    • "mo md - mo md off" Dec 25-Jan 06 off
  • 某段日期范围的例外,先写范围再写例外
    • Mo-Sa 10:00-20:00; Tu off
    • Mo-Sa 10:00-20:00; Tu 10:00-14:00
    • Mo-Fr 08:00-12:30; We 14:00-17:00
    • 这意味着它们不是追加,例如 Mo-Fr 08:00-12:30; We 14:00-17:00 表示在周三这家店只在下午开放,而不是额外开放。
  • 如果是在某段范围的第一天或最后一天,就不要使用例外规则,而使用通常的写法 Mo-Fr 10:00-20:00; Sa 10:00-14:00
  • 一周中不连续或半连续的日期将标注为 wd[x] Su[3] 09:00-12:00
    • 这用于表示当月第三个星期日 上午 9 点至中午 12 点。
    • 使用 -1 表示当月的最后一天;例如 Aug Th[-1] 表示 8 月最后一个星期四。
    • 可以使用分组, Su[1,3,5] 和 Su[1-3]
  • 如果某些天不停业,则为 00:00-24:00
  • 如果一周 7 天、每天 24 小时,它有一个特定取值:24/7。
    • 这样可以渲染出特定的图标。
  • 用于标记日出时刻的特殊时间取值是:sunrise。
  • 用于标记日落时刻的特殊时间取值是:sunset。
  • 时间后面的 + 表示"起"或"开放至结束" Sa 22:00+ 或 Sa 18:00-22:00+

更多细节请参见正式规范。

常见错误

错误 stop hand 正确 check mark 说明 notice "i"
7/8-23 Mo-Su 08:00-23:00
0600-1800 06:00-18:00
07;00-2;00pm 07:00-14:00
08.00-16.00, public room till 03.00 a.m 08:00-16:00 open, 16:00-03:00 open "public room"
09:00-21:00 TEL/072(360)3200 09:00-21:00 "call us" 添加 contact:phone=072-360-3200
10:00 - 13:30 / 17:00 - 20:30 10:00-13:30,17:00-20:30
April-September;
Mo-Fr 09:00-13:00,
14:00-18:00, Sa 10:00-13:00
Apr-Sep:
Mo-Fr 09:00-13:00,14:00-18:00;
Apr-Sep: Sa 10:00-13:00
Dining in: 6am to 11 pm;
Drive-through: 24/7
06:00-23:00 open "Dining in" ||
00:00-24:00 open "Drive-through"

或
opening_hours=06:00-23:00
opening_hours:drive_through=00:00-24:00
使用两个标签的优点是软件也能理解,例如可以提醒用户到达时只有得来速通道(drive-through)开放。
MWThF: 1200-1800; SaSu: 1200-1700 Mo,We,Th,Fr 12:00-18:00; Sa-Su 12:00-17:00
BAR:
Su-Mo 18:00-02:00;
Tu-Th 18:00-03:00;
Fr-Sa 18:00-04:00;
CLUB:
Tu-Th 20:00-03:00;
Fr-Sa 20:00-04:00
Tu-Th 20:00-03:00 open "Club and bar";
Fr-Sa 20:00-04:00 open "Club and bar" ||
Su-Mo 18:00-02:00 open "bar" ||
Tu-Th 18:00-03:00 open "bar" ||
Fr-Sa 18:00-04:00 open "bar"
Su-Th 11:00-03:00; Fr-Sa 11:00-05:00 Su-Th 11:00-03:00, Fr-Sa 11:00-05:00 参见最后一个示例
Mo-Su,PH 08:00-20:00; 2025 May 15 - closed closed; 2020 Jan 01 - 2025 May 15 Mo-Su,PH 08:00-20:00 开放式日期范围(例如店铺宣布在未来停业时)无法实现。相反,应反转条件,并使用过去的起始日期。
Mo-We 17:00-01:00; Th,Fr 15:00-01:00; PH,Sa,Su off Mo-We 17:00-01:00, Th,Fr 15:00-01:00; PH 01:00-01:00 off 使用附加规则。不能写 "Sa,Su off",因为那会把时间 "Sa 00:00-01:00" 设为关闭。
公共假日的情形与此相同,但我们必须在次日 00:00-01:00 之间保持关闭。所以用从 01:00 开始的 24 小时来表示 "off"。

非公历

关于如何表示非公历(“Opening hours syntax for non Gregorian calendar”. 17 May 2019. )曾有一些讨论。

在公路上的使用

虽然基于时间的限制也用 access:conditional=* 标注,但标注者仍然更愿意/也会在 highway=* 上添加 opening_hours=*,因为在元素于某些指定时刻对所有交通方式都关闭的情况下,这种做法——通常使用正值而非负值——相比 access:conditional=* 有多个优点:

  • 不必为所有已标注的交通方式重复关闭标签(foot:conditional=* + bicycle:conditional=* + horse:conditional=* + ...,之所以需要它们,是因为针对特定方式的 foot=yes 会覆盖通用的 access:conditional=no @ ..。—— 标签)
  • 用正值表示常规营业时间更容易标注(例如 Mo-Fr 07:00-19:00; Sa-Su 10:00-17:00;而 access:conditional=* 中的负值在某些情况下可能给出意外结果——例如不同日期适用不同规则、且规则变更日当天的关闭时段跨越午夜时)
  • 更容易明确表明该路径确实全天、全时段开放(opening_hours=24/7),用于这一点并非显而易见的情况,例如自然区域中的小径——其中许多在日落后或按季节关闭(在 OSM 中许多没有 access-conditional 标签的小径实际上在指定时间是关闭的)
  • 更容易用一个标签明确表明该元素确实对所有交通方式关闭(必须为每种交通方式分别评估 access:conditional 标签)
  • 有更多工具可用于检查/校验语法结果([示例](https://openingh.openstreetmap.de/evaluation_tool/?setLng=en))
  • 对可视化当前状态(开放/关闭)有更多支持;示例

公路上 opening_hours 的当前使用情况

要更精确地比较在 highway=* 上的使用情况还需要进一步分析,因为 access:conditional=* 不仅用于基于时间的限制,也用于其他类型的限制,例如长度、重量或天气状况。

不过,对这两个键[最常用](//taginfo.openstreetmap.org/keys/access%3Aconditional#values)的取值(日出/日落之间开放 / 日落-日出之间关闭)进行比较,可能颇具说明性:

  • 目前(2026-02),在带 highway=* 的路径 way 上,这两个键的使用频率大致相当:

opening_hours=sunrise-sunset 使用了 5.5k 次([ohsome](https://dashboard.ohsome.org/en/#backend=ohsomeApi&groupBy=none&time=2016-02-19T11%3A00%3A00Z%2F2026-02-19T11%3A00%3A00Z%2FP1Y&filter=type%3Away+and+highway%3D*+and+opening_hours%3D+sunrise-sunset&measure=count&bboxes=-180%2C-90%2C+180%2C+90)),而 access:conditional=no @ (sunset-sunrise) 使用了 6.1k 次([ohsome](https://dashboard.ohsome.org/en/#backend=ohsomeApi&groupBy=none&time=2016-02-19T11%3A00%3A00Z%2F2026-02-19T11%3A00%3A00Z%2FP1Y&filter=type%3Away+and+highway%3D*+and+%22access%3Aconditional%22%3D%22no+%40+%28sunset-sunrise%29%22&measure=count&bboxes=-180%2C-90%2C+180%2C+90))

在 route=ferry 上的使用

路由器支持

标准

营业时间语法已被引用纳入 [General Bikeshare Feed Specification](https://www.gbfs.org/documentation/reference/#hours-and-dates-of-operation)(GBFS)3.0 版,该标准是面向 amenity=bicycle_rental 运营方和交通主管部门的行业标准。

实现

JavaScript

由 User:Ypid 提供的 JavaScript 实现:

其他实现:

Java

Kotlin

PHP

Python

C++/Qt

Go

Rust

CartesApp

OsmAnd

OsmAnd 2.0 根据 opening_hours 的标注显示该 POI 是已知开放还是关闭。例如,截图拍摄时 my daBBA 餐厅是关闭的;而 Sugran Swayapakghar 是开放的。
  • OsmAnd 在 POI 搜索界面上使用这个标签。现在的实现支持更多取值(例如月份和日期),并与条件限制支持一起加入。对于 highway=* 或 route=ferry,不支持在路由中使用标注了 opening_hours=* 的取值(但支持 access:conditional=*)

Ulm、Neu-Ulm 及周边地区的营业时间

Ulm、Neu-Ulm 及周边地区。

该网页应用位于 http://ulm-oeffnungszeiten.creal.de。当地区域的营业时间在地图上可视化显示。该应用的源代码以自由许可发布,可通过 [GitHub](https://github.com/cmichi/ulm-opening-hours) 获取。将该应用改用于其他城市非常容易,GitHub 页面上有相应说明。

更多地图与应用

网页应用:

移动应用:

  • My Opening Hours,适用于 Android 设备
  • Vespucci,功能完备的 Android 版 OSM 编辑器,包含专门的营业时间界面,可支持高度复杂的营业时间
  • StreetComplete,对新手友好的 OSM 编辑器,除其他数据外还可以采集营业时间信息。

工具:

渲染

24/7(全天候)意味着需要特别对待,或许可以像这样在对象图标上加一个 "24":。

其他特殊情况要明显得多。

显示营业时间的地图:

已弃用的旧标签

以下这些(未文档化的)键已弃用,应改用 opening_hours=*。应按上文所述来解释它们的取值,以设定新键的取值:

如果你知道有使用这个标签的地方的话,请确认能否使用其他标签代替。
我们非常不鼓励你使用自动化编辑,除非你知道自己在做什么!
如果你知道有使用这个标签的地方的话,请确认能否使用其他标签代替。
我们非常不鼓励你使用自动化编辑,除非你知道自己在做什么!
如果你知道有使用这个标签的地方的话,请确认能否使用其他标签代替。
我们非常不鼓励你使用自动化编辑,除非你知道自己在做什么!
如果你知道有使用这个标签的地方的话,请确认能否使用其他标签代替。
我们非常不鼓励你使用自动化编辑,除非你知道自己在做什么!

相关标签

opening_hours:signed=no - 当营业时间没有张贴在外部可见的牌子上时

以下这些键出于不同用途使用相同的语法:

  • collection_times=* – 邮筒或回收箱的收取时间
  • service_times=* – 某要素上不同于营业时间的特殊服务的时间,例如宗教礼拜
  • breakfast=* – 是否供应早餐以及供应时间
  • lunch=* – 是否供应午餐以及供应时间
  • dinner=* – 是否供应晚餐以及供应时间
  • happy_hours=* – 某场所提供酒精饮料折扣的时间
  • smoking_hours=* – 仅在规定的时间范围内允许吸烟

Conditional restrictions 也复用营业时间语法来指定基于日期和时间的条件。

有些人用 appointment=* 标注那些(只能)预约前往的场所,而不是使用 opening_hours=*。

如果某处已永久关闭,且该对象已完全消失、重新标注也没有风险,则应删除该对象。如果仍有遗迹存在,可以使用带有lifecycle prefix的标签,例如 disused:*=* 或 abandoned:*=*

参见

外部链接

在线工具:

解析器库:

校验器库:

转换器库:

编辑器库:

参考资料

  1. ↑ 1.0 1.1 1.2 1.3 YoHours 不支持该语法的高级特性。 https://framagit.org/PanierAvide/YoHours
  2. ↑ https://github.com/organicmaps/organicmaps/issues/1575 关于 PH
  3. ↑ https://codeberg.org/comaps/comaps/issues/4996
  4. ↑ 4.0 4.1 可以为 opening_hours.js 添加默认假日。另有一套默认值的替代系统,目前尚未被 opening_hours.js 计算:Default 是关于默认值系统的提案。该提案可以设置诸如区域(国家、州等)的 maxspeed 之类的默认值,也可以设置假期时段。一个国家、一个 zone 区域可以订阅包含此类假期定义的 default。
  5. ↑ https://github.com/rezemika/humanized_opening_hours?tab=readme-ov-file#have-nice-schedules

Warning: Default sort key "Opening_hours" overrides earlier default sort key "Key:opening hours".