ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – 服务器或客户端在发送/接收日期时是否应处理时区?

2019-10-06 02:31:01  阅读:209  来源: 互联网

标签:php timezone datetime date asp-net


我了解最佳做法是将UTC日期/时间存储在我们的数据库中,并以当地时区显示给用户.我们将存储时区而不是偏移量,以便我们可以支持夏令时.

什么方法最适合处理时区?

选项1:服务器仅说UTC,客户端转换为时区

HTML格式发送到浏览器的所有日期均为UTC.客户端将使用moment.js或类似方式将UTC时间转换为正确的时区.将使用我们数据库中指定的时区而不是浏览器本地时间,因为这可能是不正确的.

当用户提交日期或时间时,必须先将其转换为UTC时间,然后再提交给服务器.

选项2:服务器转换为时区

所有计算仍以UTC格式进行,日期/时间在最后可能的时刻转换为正确的时区,例如以HTML格式输出日期时.

当客户端提交任何日期/时间时,应立即转换为UTC.

还有另外一种方法吗?

解决方法:

两种选择都是有效的,但每种方法都有优点和缺点.有几件事需要考虑:

> JavaScript的本机时区转换仅限于运行它的机器的本地时区,它也是seriously broken.如果您打算在客户端转换值,则需要one of the time zone libraries listed here.我个人推荐moment-timezone.
>在客户端(使用任何库)中转换值将需要时区数据,如果您想要支持世界的所有时区,这可能会有些大.您可能需要考虑将数据限制为满足您要求的最小子集.
>服务器端时区转换还需要有效的时区数据. PHP内置了这个,您可以随时了解the timezonedb package in PECL的更新.
>您还使用ASP.Net标记了您的问题. .Net包括TimeZoneInfo,它仅提供对Microsoft时区的支持.如果您需要标准的IANA时区(如PHP中使用的那些时区),那么您将需要一个库.我推荐Noda Time.您可以在the timezone tag wiki中阅读有关不同时区的更多信息.
>您如何交付最终结果取决于您正在编写的应用程序类型.

>如果您要创建一个“传统”网页,HTML将在服务器端呈现,那么您将呈现一个人类可读的字符串.这意味着不仅要了解时区,还要了解用户的语言环境,以便您可以使用文化上适当的格式.

这与时区完全无关.例如,您可能和美国人使用MM / DD / YYYY格式,但仍然在物理上位于欧洲并使用欧洲时区.
>如果您的服务器通过API(即JSON,XML等)提供结果,那么您的结果应该是机器可读的.最好使用ISO 8601格式.具体而言,应按照RFC 3339中的描述传递时间戳.

这意味着它们应始终包含Z(对于UTC值)或偏移(对于本地值).因此,您可以考虑用户的时区,但您提供的结果应包括本地偏移,因此它是明确的.

例如,您的UTC值为2014-07-09T12:00:00Z,然后是America / Los_Angeles,它是2014-07-09T05:00:00-07:00,这是应该通过API传递的内容.

在客户端,您可以使用像moment.js这样的库为用户呈现该值.例如:

var s = moment.parseZone("2014-07-09T05:00:00-07:00").format("LLL");

相关:How to properly work with Timezone?

标签:php,timezone,datetime,date,asp-net
来源: https://codeday.me/bug/20191006/1858174.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有