PHP日期和时区



我有一个管理面板,其中输入的项目将具有time_post和过期时间。这些时间在输入时使用时间戳(time())。

我希望使用花哨的日期/时间选择器输入过期时间,但是选择器使用JavaScript客户端时间而不是服务器时间。

解决这个问题的一种方法是保存用户所在的时区,然后使用该时区作为输入数据的偏移量,但它必须是100%正确的。

有什么"合适"的方法来处理这个问题吗?我看到一些PHP函数确实使用时区设置,但其他函数没有,例如实际的time()函数没有,即使我创建一个DateTime对象,输出当前时间戳,更改时区并再次输出时间戳,它只返回相同的时间戳两次。

任何指针都是可爱的

我假设实际的时间戳值仍然是正确的(独立的),无论最终用户的设置/时区是什么。

当/如果你想在服务器端生成日期字符串,从而返回带有偏移量的时间时,可能会出现问题。

要么 1。不生成日期字符串服务器端,如果你不确定时区偏移或 2。警告用户并确保他们指定他们的时区,然后当您从时间戳

输出日期字符串时强制使用该时区

几点:

  • 您可能不需要为您描述的场景识别用户的时区,但如果您这样做了,那么请认识到时区和偏移量是两个不同的东西。请参阅时区标签wiki中的"time zone != offset"。如果您确实认为需要用户的时区(例如"America/Los_Angeles"),那么请参考此答案。

  • 如果您希望输入的日期相对于客户端的本地时区,那么您需要使用Date对象或JavaScript中像moment.js这样的库。使用日期选择器中的各个日期/时间组件来获取unix时间戳或ISO8601格式的UTC日期/时间字符串。例如:"2016-09-02T01:23:45Z"

  • 如果您希望输入的日期相对于其他时区,那么您需要传输客户端输入的实际值而不进行修改。最好的方式是在ISO8601格式无偏移。例如,"2016-09-02T08:00:00"。在服务器端,解析该值并应用适用的时区。

  • 如果您只选择日期而不选择时间,那么您应该真正考虑是否适用任何时间。00:00真的适用吗?还是应该是24:0023:59:59.999 ?如果你不关心用户的时区,那么你就不应该分配任何时间值。只要过了日期就行了。例如:"2016-09-02"

  • 不要依赖于服务器的时区设置。虽然PHP有设置"默认"时区的功能,但您应该尽量避免使用它。在每个操作的基础上显式地表示时区要安全得多。在PHP中使用DateTime类,而不是time()

一定要阅读夏令时和时区最佳实践,并在StackOverflow上彻底搜索其他问题,因为这些问题已经在各种其他问题中得到了回答。

相关内容

  • 没有找到相关文章

最新更新