如何返回可以根据不同区域设置转换的日期时间


How to return a datetime that can be converted based on different locales?

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

这次做得好吗?或者我应该使用类似ISO 8601的东西吗?

我还读到,在PHP中,我们可以用返回日期/时间

gmdate('Y-m-dTH:i:sZ');

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

当您处理可能来自不同时区的日期时,您应该做的是将其作为时间戳存储在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.