Php 从datetimepicker的html输入获取时间值

Php 从datetimepicker的html输入获取时间值,php,html,Php,Html,我已经使用internet上的datetime_选择器为html文本输入创建了一个值。现在的问题是,我如何将值区分为明确的日期值和明确的时间值。使用日期选择器,我可以得到如下文本输入: 2013/12/29 12:52 可以将此值分别插入数据库中的日期和时间列中。如果可以的话,代码应该是什么样子的,通常我使用下面的代码获得html文本输入 $id = pg_escape_string($_POST['ID']); 但这将得到全部价值。由于我刚刚开始学习html和php,我希望获得更详细的编码,

我已经使用internet上的datetime_选择器为html文本输入创建了一个值。现在的问题是,我如何将值区分为明确的日期值和明确的时间值。使用日期选择器,我可以得到如下文本输入:

2013/12/29 12:52

可以将此值分别插入数据库中的日期和时间列中。如果可以的话,代码应该是什么样子的,通常我使用下面的代码获得html文本输入

$id = pg_escape_string($_POST['ID']);
但这将得到全部价值。由于我刚刚开始学习html和php,我希望获得更详细的编码,提前感谢您的帮助。

您可以简化从DatePicker获得的文本

$valuefromdatepicker='2013/12/29 12:52';
$datetimeval= explode(' ',$valuefromdatepicker);
$date = $datetimeval[0]; // holds 2013/12/29
$time = $datetimeval[1]; // holds 12:52
为了约会

echo date('Y-m-d',strtotime('2013/12/29 12:52'));  
还有时间

echo date('H:i',strtotime('2013/12/29 12:52'));

请参见和日期根据您的示例,我不确定问题是否为:

  • 您的数据库中有一个日期列,但当您尝试插入带有日期和时间组合的值时,只有日期存储在数据库中,但时间丢失

  • 您有一个日期列和一个时间列,并且正在尝试拆分输入字符串以隔离要保存到时间列的时间值

在这两种情况下,我怀疑问题实际上与字符串解析或拆分无关,而是与数据库设置有关。让我们回顾一下上述两种情况:

  • 插入日期时间字符串,如
    2013/12/29 12:52
    ,只存储日期,但删除时间。您希望日期和时间都存储在该列中
如果将列设置为“日期”数据类型,则可能发生这种情况,该数据类型仅用于存储日期值,而不是时间值。PostgreSQL与MySQL和类似的数据库服务器一样,允许您为日期列传递完整的日期时间值,它会自动忽略值中不相关的时间部分。如果希望完整的日期和时间存储在该列中,则需要将该列的数据类型从“日期”更改为“时间戳”。查看Postgre文档,可以使用类似于以下内容的语句:

ALTER TABLE foo
    ALTER COLUMN foo_timestamp SET DATA TYPE timestamp;
  • 您希望在一列中存储日期值,在另一列中存储时间值,但不确定如何分隔插入的时间值
正如“date”类型的列将允许传入完整的datetime值并静默地删除输入的时间部分一样,“time”类型的列也将允许传入完整的datetime值并静默地删除输入的日期部分,只存储时间。这意味着在插入之前不需要解析字符串和拆分值

但是,使用上述任一解决方案,数据库需要能够正确解释完整的日期时间字符串,以解释日期和时间,并相应地存储值。虽然可能没有必要,但最好使用标准格式设置日期时间字符串的格式,以避免潜在的问题。我建议使用php的DateTime类来实现这一点,如下所示:

// assuming that the format from picker is always : 2013/05/01 01:05

$date = DateTime::createFromFormat('Y/m/d H:i', $_POST['datetime']);

$iso_date = $date->format(ISO8601); // returns '2013-05-01T01:05:00'
// assuming that the format from picker is always : 2013/05/01 01:05

$date = DateTime::createFromFormat('Y/m/d H:i', $_POST['datetime']);

$date_string = $date->format('Y-m-d'); // returns '2013-05-01';
$time_string = $date->format('H:i'); // returns '01:05';
对于ISO-8601格式的datetime,如果日期列和时间列是单独的列,则可以将其传入,如果要将它们存储在一起,则可以将其传入单个时间戳列

还可以使用DateTime类将日期和时间字符串作为单独的变量获取,如下所示:

// assuming that the format from picker is always : 2013/05/01 01:05

$date = DateTime::createFromFormat('Y/m/d H:i', $_POST['datetime']);

$iso_date = $date->format(ISO8601); // returns '2013-05-01T01:05:00'
// assuming that the format from picker is always : 2013/05/01 01:05

$date = DateTime::createFromFormat('Y/m/d H:i', $_POST['datetime']);

$date_string = $date->format('Y-m-d'); // returns '2013-05-01';
$time_string = $date->format('H:i'); // returns '01:05';
试试这个:


您是在询问如何拆分还是如何在数据库中存储?请使用
date($Y:m:d',$date)
函数。@Anthony如何拆分它以便在数据库中存储..因为如果我使用$date=pg_escape_字符串($\u POST['datetime']);获取日期对我来说很好,但我不知道如何获取滞后时间
var\u dump($date)
返回什么?老实说,很不清楚你的目标是什么或根本问题。问题是您希望单独存储日期和时间,还是在尝试将datetime字符串插入数据库时只保存日期?您是否需要知道如何在数据库中创建列,或者如何解析字符串,以便将日期值和时间值存储为两个不同的变量?答案/解决方案多种多样,具体取决于您实际要做的事情和遇到的障碍。如果可以,您会将日期和时间作为一个值存储在数据库中吗?我必须输入datepicker中的值?因为我使用了提交按钮,所以我必须在另一个php页面上获取这些值,所以这段代码是用于同一页面的?我确实在我的问题中添加了一些注释,您能帮我看看吗?非常感谢