我们遇到了他们的日期和时间……好吧,每天。 当涉及到网络时,您可以在移动应用程序,电子邮件,消息传递应用程序以及许多其他地方发现它们。 尽管我们每天都在看到日期和时间, 但我们仍未采用通用格式。
例如,如果我写10/05/2015,除非我告诉你我来自哪里,否则你将永远无法确定“ 10”是月份还是日期。 有时格式会更改,而其他时候会更改语言。
重要的是,作为Web开发人员,我们要注意项目中处理的日期和时间,以便我们可以将其迎合不同地理区域的居民而不会发生任何冲突。 在这篇文章中,我们将讨论在显示日期时间时应该避免什么以及应该接受什么 。
全球化
假设我们不想转换并向世界各地的不同观看者显示不同的日期和时间格式,我们该怎么办? 我们选择一种全球格式并坚持使用。 这是一些标准起作用的地方。 在此之前,我必须建议W3C建议我们将ISO 8601日期格式与UTC时区一起使用。
ISO 8601
ISO 8601描述了一种国际认可的使用数字表示日期和时间的方式。
完成日期的格式为: YYYY-MM-DD
,例如: 2015-07-28
完整的日期时间; YYYY-MM-DDThh:mm:ss.s
,例如: 2015-07-28T21:15:18.45
请注意,由于在上面的示例中未提及时区,因此应假定时间在本地时区中。 如果您决定使用UTC时区,只需在值中添加Z即可表示UTC
例如: 2015-07-28T21:15:18.45Z
但是,如果要显示本地时间,则可以根据需要将UTC的时区偏移量添加到+hh:mm
或-hh:mm
格式的值中。
例如:让我们假设2015-07-28T21:15:18.45
在EST(东部标准时间)时区中,该时间比UTC时区晚5个小时。
为了用UTC偏移量表示它,我们编写了2015-07-28T21:15:18.45-05:00
,它等效于UTC时间2015-07-29T02:15:18.45Z
。
再次附加Z表示所显示的日期时间以UTC时间表示。
UTC与GMT
他们都是一样的但又不同。 到目前为止,您可能至少遇到过GMT一次; 同时在手机或计算机中设置日期时间。 它是世界上公认的最流行的时区,因为它的存在时间比世界协调时间更长。
尽管有些人可能说两者相同,但事实并非如此,但UTC是GMT的后继者,由国际电信联盟 ( International Telecommunications Union )维护。 建议参考基于UTC的时间而不是GMT。
使用月份名称
ISO标准仅在日期表示中使用数字,以避免任何语言冲突。 但是,如果您的Web应用程序的内容将使用英语,那么您应该考虑用英语而不是数字写下几个月。
取而代之的2015-07-28
, 28, July, 2015
更容易被许多人理解,少混乱。
本土化
有时候,我们希望对我们的服务非常具体,并希望以当地时区和语言表示日期和时间。 Web开发人员可以使用许多库和API,以根据访问区域使用和显示日期和时间。
您可以通过解释Accept-Language
请求标头或通过navigator.language or navigator.browserLanguage
JavaScript对象来获取浏览器的默认语言环境,但是最好的方法是让用户在应用程序中选择语言环境,因为前一种方法不是非常可靠。
有了语言环境后,就可以根据日期格式对日期时间进行格式化,例如,使用国际化API,可以使用toLocaleDateString
中的toLocaleDateString
格式化日期,例如, myDate.toLocaleDateString('ko-KR')
将返回格式化的日期以韩语为母语的人在韩国使用的格式表示。
夏令时(DST)
在某些国家/地区,夏令时通过在夏季将时钟提前一个小时来实现,以利用多余的阳光。 请注意DST,以与服务中的当地时间保持同步。
没有两位数的年份
自定义本地化的日期和时间时,请不要在年份中使用两位数格式。 我们已经进入了21世纪。 使用多年的像64
, 99
等将是麻烦的未来。 如果您已经有两位数的年份系统,请考虑进行更改。
Year年和其他日历
让我们在处理日期时要记住一些其他事情。 如果您没有为日期使用任何库或API,并且希望自己处理(尽管不建议这样做),请不要忘记在February年输入中显示2月29日。
另外,值得注意的是, 公历不是唯一可用的日历,并且在全世界范围内都使用。 当地人很少遵循区域日历,尤其是在庆祝活动时。
参考资料
- 国际电信联盟: ITU-R协调世界时(UTC)研究现状
- ISO: ISO 8601 –日期和时间格式
- 维基百科: 世界标准时间
- 维基百科: 夏令时
- 维基百科: 格林威治标准时间
- W3C注意: 日期和时间格式
- W3C提示: 使用国际日期格式(ISO)