Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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 调整用户指定的日期&;时间(使用mktime转换)到特定时区_Php_Date_Time_Timezone - Fatal编程技术网

Php 调整用户指定的日期&;时间(使用mktime转换)到特定时区

Php 调整用户指定的日期&;时间(使用mktime转换)到特定时区,php,date,time,timezone,Php,Date,Time,Timezone,我已经为这个挠头好几个小时了,决定寻求一些帮助 我使用javascript日历允许用户选择日期和时间。现在我希望这个时间是相对于他们的时区的(我已经在数据库中记录了)。然而,我无法理解如何存储输入。我知道我需要调整UTC时间戳,mktime将吐出用户的时区,但我遇到了问题 这就是我尝试过的: $time = $_POST['datetime']; // Dont worry I will sanitize the input echo $time.'<br>'; $timezone

我已经为这个挠头好几个小时了,决定寻求一些帮助

我使用javascript日历允许用户选择日期和时间。现在我希望这个时间是相对于他们的时区的(我已经在数据库中记录了)。然而,我无法理解如何存储输入。我知道我需要调整UTC时间戳,mktime将吐出用户的时区,但我遇到了问题

这就是我尝试过的:

$time = $_POST['datetime']; // Dont worry I will sanitize the input
echo $time.'<br>';
$timezone = "Canada/Pacific"; // Just an example, this will be taken from the database
$timestamp = mktime($hours, $minute, 0, $month, $day, $year); // Based on $time, I just ignored my steps to get the hours etc here
date_default_timezone_set($timezone);
echo 'Your timezone: '.date("F j Y h:i:s A", $timestamp).'<br />';
date_default_timezone_set('UTC');
echo 'UTC: '.date("F j Y h:i:s A", $timestamp);
问题是,尽管用户输入的是凌晨1:00,但我希望mktime将其转换为UTC时间戳1:00,但它似乎被转换为UTC时间戳,而实际上是上午6:00。我不知道5个小时的差异是从哪里来的,我不想在这里编写一个静态的5个小时的差异

但是,在修复后,我希望将时间戳保存为UTC时间戳,该时间戳已调整,以便将来如果我要获取时间戳并执行以下操作:

$timezone = "Canada/Pacific";
date_default_timezone_set($timezone);
echo 'Time: '.date("F j Y h:i:s A", $timestamp); // $timestamp from the database
它应该输出:

30 October 2013 - 01:00 AM
感谢您的帮助

使用和,你的生活就会更轻松

如果发布的日期时间是UTC格式,则可以在UTC时区中简单地创建datetime对象,如下所示:

$dt = DateTime::createFromFormat('j F Y - h:i A', $_POST['datetime'], new DateTimezone('UTC'));
$dt=newdatetime($\u POST['DateTime'],newdatetimezone('UTC'));
echo$dt->format('fjyh:i:sap');
如果要将时区更改为用户,可以调用DateTime对象上的
setTimezone()

$dt->setTimezone(新日期时区('Canada/Pacific');
echo$dt->format('fjyh:i:sap');
试试


如果发布的日期时间类似于2013年10月30日凌晨1:00,则不能使用
new datetime()
strotime()
,因为它不是标准的日期时间格式。在这种情况下,您可以这样使用:

$dt = DateTime::createFromFormat('j F Y - h:i A', $_POST['datetime'], new DateTimezone('UTC'));

试试

谢谢!这让我的生活轻松多了@用户2988034:没问题,很高兴我能帮忙。我早就告诉过你;)哇!没有更早地使用DateTime()。你帮我解决了一个月的问题!:)