如何返回可根据不同语言环境转换的日期时间?

时间:2014-10-15 10:17:56

标签: php timezone locale

我们正在使用PHP开发一个API,MySQL的一个字段以YYYY-MM-DD HH:MM:SS的格式返回日期时间。这种API在不久的将来可以在不同的大陆使用。我应该以{{1​​}}格式保存我的ISO时间偏移量也可以保留吗?

这次是做这个工作吗?或者我应该使用datetime之类的东西?

我还读过PHP,我们可以通过以下方式返回日期/时间:

ISO 8601

你有什么建议?我应该以什么格式返回日期/时间?

1 个答案:

答案 0 :(得分:1)

当您处理来自不同时区的日期时,您应该做的是将其存储为MySQL中的时间戳。在这种情况下,信息来自哪个(哪个大陆)变得无关紧要。这对于保存数据是正确的。现在,在向不同大陆的人们显示日期信息时,您必须知道他们的时区。使用PHP DateTime,您可以使用数据库中的时间戳,将其与DateTimeZone配对,并显示该时区的正确时间。

此外,当您需要在各种服务之间交换数据时 - 提供时间戳允许目标应用程序为其自己的格式化目的应用任何时区范围。但是,所有日期存储都应该没有时区依赖。这就是为什么时间戳在这里起着巨大的实用作用 - 它始终是UTC。

现在,让我们提供一些代码,这样就不会成为全部通话。

MySQL的timestamp数据类型在内部将值存储为整数,但将其显示为日期时间。

$mysql_datetime = '2014-10-15 12:58:55'; // this is what you got from the database

$dt = DateTime::createFromFormat('Y-m-d H:i:s', $mysql_datetime); // Now you have the object which can manipulate dates

// Let's assume you have someone in New York who wants to see the date but formatted according to their time zone

$dt->setTimeZone(new DateTimeZone('America/New_York'));

echo $dt->format('Y.m.d, H:i:s'); // Format accepted is the same as for `date()` function.