Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于php时区设置的建议_Php_Date_Time_Timezone_Strtotime - Fatal编程技术网

关于php时区设置的建议

关于php时区设置的建议,php,date,time,timezone,strtotime,Php,Date,Time,Timezone,Strtotime,我住在丹麦,但我正在为一位在美国(华盛顿州)的朋友建立一个网页。该页面位于丹麦的Surftown 我知道有9个小时的差异,所以我设定: date_default_timezone_set('America/Los_Angeles'); 但是对于时区/date()和strotime()我显然不太了解,因为: 通过文本输入,我试图将特定的日期和时间保存到数据库中 假设$\u POST[date]输入为:“01/29/2015”,而$\u POST[time]输入为:“02:00 PM” 然后,我使

我住在丹麦,但我正在为一位在美国(华盛顿州)的朋友建立一个网页。该页面位于丹麦的Surftown

我知道有9个小时的差异,所以我设定:

date_default_timezone_set('America/Los_Angeles');
但是对于时区/
date()
strotime()
我显然不太了解,因为:

通过文本输入,我试图将特定的日期和时间保存到数据库中

假设
$\u POST[date]
输入为:“01/29/2015”,而
$\u POST[time]
输入为:“02:00 PM”

然后,我使用以下方法创建一个戳记:

strtotime($_POST[date].' '.$_POST[time]);
但是当我尝试输出这个时,我得到了正确的日期-但是9个小时被添加到时间中了吗?为什么会这样

我想我可以删除这个特定任务的时区设置-但是 我想知道为什么。我设置时区是因为我还需要根据用户的实际时间保存一些时间戳(在华盛顿州,而不是丹麦)


您能提供帮助吗?

strotime假定您正在传递UTC日期,因此它会将其转换为服务器时区,您可以执行以下操作:

$date=新的日期时间($_POST[date].'.$_POST[time],新的日期时区(“UTC”)


echo$date->getTimestamp()

一旦夏时制重新抬头,我可以看到这里的各种麻烦。为服务器和任何数据库设置一致的内部时间(建议使用UTC),并在输出时转换为本地时间。今天有华盛顿州和丹麦。明天你可能不得不加上伦敦或华盛顿特区,或者,天哪,印第安纳州的某个地方。通过这种方式添加额外的时区会容易得多。谢谢。这是有道理的。除了我不知道你说的“输出时转换为当地时间”是什么意思。1) 我怎么知道当地的时区是什么?2)然后我会在输出时使用date_default_timezone_set()吗?请澄清您是如何“尝试输出这个”的,以及您从
strotime
中得到的时间戳是什么。@JohnKjøller识别时区最可靠的方法是询问用户。或者,您可以发出UTC并让Javascript根据客户机的机器设置转换为本地时间,或者您可以使用服务器上的GeoIP定位客户机并从中设置显示时区。不要弄乱
日期\u默认值\u时区\u设置()
。使用它将UTC设置在脚本的顶部,然后忘记它。对所有日期/时间操作使用
DateTime
类。它包括更改
DateTime
实例时区的方法。@HoboSapiens得到了!非常感谢你抽出时间来帮助我。我不确定我是否知道正确的方法:也许你会写一个我能接受的答案吗?