我安装了 Opera 浏览器,因为它是目前唯一具有 HTML5 datetime
日历功能的浏览器。 datetime
输入有两种类型:一种是省略时区信息的datetime-local
;另一个是添加时区信息的 datetime
本身。
根据我在 Opera 中的观察,时区固定为 UTC,而不是遵循用户输入的 datetime
时区。这似乎违反直觉,因为用户通常不知道 UTC 时间是多少,更不用说根据他自己的时区计算正确的 UTC 时间了。
W3C 是否要求将 UTC 作为 datetime
输入的默认时区,或者 Opera 浏览器是否通过将时区固定为 UTC 来做正确的事情?
经过进一步研究,这是我的发现:
whatwg似乎建议相反的方式:
- 日期时间(具体年、月、日、时)
- datetime-local(具体年、月、日、时间、时区)
Mozilla documentation是这样说的:
- datetime:HTML5 控件,用于输入基于 UTC 时区的日期和时间(小时、分钟、秒和秒的小数部分)。
W3C提出以下建议:
用户代理不得允许用户将值设置为非空字符串,该字符串不是以 UTC 表示的有效全局日期和时间字符串,但用户代理可能允许用户设置和查看时间在另一个时区,并在值中默默地将时间转换为 UTC 时区或从 UTC 时区转换。如果用户代理提供用于选择全局日期和时间的用户界面,则该值必须设置为以 UTC 表示的有效全局日期和时间字符串,代表用户的选择。
向用户显示的格式独立于用于表单提交的格式。鼓励浏览器使用根据用户首选区域设置的约定显示日期和时间的用户界面。
在我看来,W3C 允许 datetime
输入为本地格式,但要求表单提交的最终值以 UTC 格式表示。
最佳答案
你问的唯一问题是:
Does W3C requires UTC to be the default timezone for datetime input, or is Opera browser doing the right thing by fixing timezone as UTC?
但是正如您所指出的:
user agents may allow the user to set and view the time in another time zone
所以您的问题的答案是 W3C 不要求输入 UTC,但允许它,因此 Opera 无论哪种方式都会做正确的事情。
这些模棱两可的规范非常愚蠢。实际上,它们适得其反。我不明白如果他们不打算实际定义所需的行为,他们为什么还要打扰。
关于html - 浏览器是否需要为日期时间输入检测用户时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11026383/