Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.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/8/mysql/60.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_Mysql_Date_Time_Timezone - Fatal编程技术网

Php 将时间/日期附加和应用于用户提交的数据并转换为指定时区的替代或更好的方法

Php 将时间/日期附加和应用于用户提交的数据并转换为指定时区的替代或更好的方法,php,mysql,date,time,timezone,Php,Mysql,Date,Time,Timezone,目前,我使用用户帖子/上传/注册时间等附加、存储和转换时间/日期的方式是将默认时区设置为UTC,并在处理时使用PHP的time()获取时间戳 然后,我将提交的每一行数据存储在数据库中(int(11)),然后当我显示他们的帖子/上传等时,我会进行查询,将附加的时间戳带到其中,并根据他们指定的时区进行转换,并通过输入日期格式使其可读 请注意,$timezone和$date\u format已在创建帐户时从其配置文件设置中选择 存储数据 <?php date_default_timez

目前,我使用用户帖子/上传/注册时间等附加、存储和转换时间/日期的方式是将默认时区设置为UTC,并在处理时使用PHP的
time()
获取时间戳

然后,我将提交的每一行数据存储在数据库中(
int(11)
),然后当我显示他们的帖子/上传等时,我会进行查询,将附加的时间戳带到其中,并根据他们指定的时区进行转换,并通过输入日期格式使其可读

请注意,
$timezone
$date\u format
已在创建帐户时从其配置文件设置中选择

存储数据

<?php

    date_default_timezone_set('UTC');
    $time_stamp = time();

    // MySQL injection protection here...
    // Store data here...

?>
<?php

    // MySQL query here....

    $post_time = $row['time_stamp'];

    $post_dt_zone = new DateTimeZone($timezone);

    $time_from_post = date('r', $post_time);

    $post_d_time = new DateTime($time_from_post);

    $post_d_time->setTimeZone($post_dt_zone);

    $time_from_post = $post_d_time->format($date_format);

?>

检索数据

<?php

    date_default_timezone_set('UTC');
    $time_stamp = time();

    // MySQL injection protection here...
    // Store data here...

?>
<?php

    // MySQL query here....

    $post_time = $row['time_stamp'];

    $post_dt_zone = new DateTimeZone($timezone);

    $time_from_post = date('r', $post_time);

    $post_d_time = new DateTime($time_from_post);

    $post_d_time->setTimeZone($post_dt_zone);

    $time_from_post = $post_d_time->format($date_format);

?>


现在我的问题是,这是一个好方法吗?是否有更常用的替代方案,或者如果我尝试更新任何内容,将来是否会遇到问题?

这取决于具体情况。根据变量的名称判断,您正在记录发布帖子的时间。您可以使用php
time()
方法,也可以使用MySQL方法

MySQL方法:您创建一个表(或编辑当前表),其中时间发布字段
'time\u posted'
如下所示:

CREATE TABLE table_name(
id int NOT NULL,
time_posted datetime NOT NULL DEFAULT NOW(),
PRIMARY KEY (id))
当您插入新行时,唯一的变化是您不再需要插入时间戳(或日期),这将由MySQL自动完成

但是,您应该知道,使用
NOW()
将以以下格式存储日期/时间:
2011-12-10 12:51:23.212
. 因此,如果这是您希望显示日期的方式,那么这可能是您可以使用的一种方法。您还可以使用
CURDATE()
CURTIME()
分别显示日期和时间

但是,如果希望以不同的格式显示日期/时间,则需要使用
strotime()
mktime()
检索发布的日期/时间的时间戳,然后使用首选方法以所需的方式显示。如果是这种情况,我认为您当前的方法是最好的。

我得到#1067-无效的“发布时间”默认值