- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 <input type="datetime-local"...>
访问 Web 应用程序中的 native iOS 日期/时间界面.
当使用 <input>
的这种风格时,你设置或获取的时间值是标准ISO格式的字符串,如2019-07-09T16:30
.
您可能会认为,无论您将什么时间作为字符串值输入,您将在 native 界面中看到的时间(尽管重新格式化并且可能在某些区域更改为 12 小时 AM/PM 格式)是将是同一时间。这就是我目前在使用 Android 平板电脑时看到的情况,也是我使用 iOS 时大部分时间得到的情况。
但对于一个多世纪前的日期,我发现 iOS 显示的时间比我输入的 ISO 时间字符串提前三分钟。同样,如果我通过 iOS 编辑时间,并坚持大致相同的古代时间段,我从 <input>
返回的时间无论我在屏幕界面中输入什么,都落后三分钟。
此偏移量取决于时区。我的正常时区是 America/New_York。如果我将我的 iPhone 或 iPad 切换到美国/芝加哥,也会出现同样的错误,但差异是整整 9 分钟。
您可以在此处查看正在运行的错误:https://angular-ios-datetime.stackblitz.io (此处代码:https://stackblitz.com/edit/angular-ios-datetime)
我知道实际上发生了什么......
1883 年 11 月 18 日,纽约市本地时间 12:03:58,时钟拨回 3 分 58 秒,回到正午。这是全国为改用标准化时区而采取的众多步骤之一。
芝加哥(以及许多其他城市)也进行了类似的更改,但芝加哥从本地时间到标准时间的更改接近九分钟。
<input type="datetime-local"...>
似乎发生了什么是 JavaScript 和 iOS 之间存在冲突,这两者之一(可能是 JavaScript)不知道很久以前的时区历史,但另一个(可能是 iOS)确实知道。
我想知道的是:
有没有办法使用<input type="datetime-local"...>
而是坚持使用UTC?也许是 iOS 的非标准功能?
曾经有一个选项<input type="datetime"...>
(没有 -local
),但它已被弃用,因为它不受大多数当前网络浏览器的支持,包括 iOS 上的 Safari。
最佳答案
我同意这是 <input type="datetime-local" />
的 iOS 实现中的错误.它会影响 iOS 上的 Safari 和 Chrome。 (我使用 Safari Mobile 605.1 和 Chrome 75 在 iOS 12 上进行了测试。)
有趣的是,它不仅是历史日期的问题,而且还有可能受本地时区影响的任何值的问题。例如,将设备设置为纽约时间,尝试选择 2020-03-08T02:00
.
请注意,我可以到达凌晨 1 点,但是 2
变灰。如果您尝试选择它,它会移动到不同的时间。那是因为当天 2:00 AM 在纽约是无效的。夏令时开始时,时钟从凌晨 1:59 提前到凌晨 3:00。
问题是,如果应用程序选择的时区时间与设备时区不同,例如亚利桑那州凤凰城 - DST 不适用。或者可能是在不同日期进行 DST 转换的不同国家/地区。
这一切归结为对“本地”一词的解释。
通过HTML specification for datetime-local
,上面写着(强调我的):
The input element represents a control for setting the element's value to a string representing a local date and time, with no time-zone offset information.
此外,它 defines a "local date and time"作为:
... consisting of a year, a month, and a day, and a time, consisting of an hour, a minute, a second, and a fraction of a second, but expressed without a time zone.
换句话说,它是“本地日期和时间”,而不是“用户的本地日期和时间”。顺便说一下,这与 ISO 8601 规范中的术语完全一致。
不幸的是,不仅 iOS 实现在这方面不正确,Mozilla MDN documentation 也是如此。 ,之前包含文本“使用用户的本地时区”。 (我提交了更新以更正此问题。)
简而言之,datetime-local
应该与任何时区无关。
作为解决方法,请考虑使用两个控件。
<input type="date" /> <input type="time" />
它们在 iOS 中会像这样显示:
然后您会为每个人获得单独的选择器。
它同时解决了 LMT 问题和 DST 间隙问题,因为这两个控件都不对本地时区做任何事情。作为额外的好处,您可以在日期选择器中获得年份,而合并后的日期选择器中缺少年份。
关于javascript - 是否有针对这个模糊的几分钟 iOS 日期时间本地错误的修复程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56960515/
IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ? 例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA
我目前正在开发一个使用Facebook sdk登录(通过FBLoginView)的iOS应用。 一切正常,除了那些拥有较旧版本的facebook的人。 当他们按下“使用Facebook登录”按钮时,他
假设我有: this - is an - example - with some - dashesNSRange将使用`rangeOfString:@“-”拾取“-”的第一个实例,但是如果我只想要最后
Card.io SDK提供以下详细信息: 卡号,有效期,月份,年份,CVV和邮政编码。 如何从此SDK获取国家名称。 - (void)userDidProvideCreditCardInfo:(Car
iOS 应用程序如何从网络服务下载图片并在安装过程中将它们安装到用户的 iOS 设备上?可能吗? 最佳答案 您无法控制应用在用户设备上的安装,因此无法在安装过程中下载其他数据。 只需在安装后首次启动应
我曾经开发过一款企业版 iOS 产品,我们公司曾将其出售给大型企业,供他们的员工使用。 该应用程序通过 AppStore 提供,企业用户获得了公司特定的配置文件(包含应用程序配置文件)以启用他们有权使
我正在尝试将 Card.io SDK 集成到我的 iOS 应用程序中。我想为 CardIO ui 做一个简单的本地化,如更改取消按钮标题或“在此保留信用卡”提示文本。 我在 github 上找到了这个
我正在使用 CardIOView 和 CardIOViewDelegate 类,没有可以设置为 YES 的 BOOL 来扫描 collectCardholderName。我可以看到它在 CardIOP
我有一个集成了通话工具包的 voip 应用程序。每次我从我的 voip 应用程序调用时,都会在 native 电话应用程序中创建一个新的最近通话记录。我在 voip 应用程序中也有自定义联系人(电话应
iOS 应用程序如何知道应用程序打开时屏幕上是否已经有键盘?应用程序运行后,它可以接收键盘显示/隐藏通知。但是,如果应用程序在分屏模式下作为辅助应用程序打开,而主应用程序已经显示键盘,则辅助应用程序不
我在模拟器中收到以下错误: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
如 Apple 文档所示,可以通过 EAAccessory Framework 与经过认证的配件(由 Apple 认证)进行通信。但是我有点困惑,因为一些帖子告诉我它也可以通过 CoreBluetoo
尽管现在的调试器已经很不错了,但有时找出应用程序中正在发生的事情的最好方法仍然是古老的 NSLog。当您连接到计算机时,这样做很容易; Xcode 会帮助弹出日志查看器面板,然后就可以了。当您不在办公
在我的 iOS 应用程序中,我定义了一些兴趣点。其中一些有一个 Kontakt.io 信标的名称,它绑定(bind)到一个特定的 PoI(我的意思是通常贴在信标标签上的名称)。现在我想在附近发现信标,
我正在为警报提示创建一个 trigger.io 插件。尝试从警报提示返回数据。这是我的代码: // Prompt + (void)show_prompt:(ForgeTask*)task{
您好,我是 Apple iOS 的新手。我阅读并搜索了很多关于推送通知的文章,但我没有发现任何关于 APNS 从 io4 到 ios 6 的新更新的信息。任何人都可以向我提供 APNS 如何在 ios
UITabBar 的高度似乎在 iOS 7 和 8/9/10/11 之间发生了变化。我发布这个问题是为了让其他人轻松找到答案。 那么:在 iPhone 和 iPad 上的 iOS 8/9/10/11
我想我可以针对不同的 iOS 版本使用不同的 Storyboard。 由于 UI 的差异,我将创建下一个 Storyboard: Main_iPhone.storyboard Main_iPad.st
我正在写一些东西,我将使用设备的 iTunes 库中的一部分音轨来覆盖 2 个视频的组合,例如: AVMutableComposition* mixComposition = [[AVMutableC
我创建了一个简单的 iOS 程序,可以顺利编译并在 iPad 模拟器上运行良好。当我告诉 XCode 4 使用我连接的 iPad 设备时,无法编译相同的程序。问题似乎是当我尝试使用附加的 iPad 时
我是一名优秀的程序员,十分优秀!