从日期和时间创建ISO 8601日期时间

时间:2011-06-23 13:26:51

标签: php datetime

我正在尝试找到处理从我知道的日期和我知道的时间创建ISO 8601日期时间的最佳方法。我在创建这些日期时间以及将它们存储在数据库中时处理UTC时间。我有一个日期(2011-06-24),我想添加时间,在表格上我有文本输入的开始和结束时间。提交此表单后,我想知道我知道的日期(2011-06-24)和我知道的时间(上午10:00和上午11:30),并创建一个将在开始时存储的日期时间和结束时间。

我很擅长使用PHP DateTime类,这就是我想出的:

$day = "2011-06-24";
$start = "10:00 AM";
$end = "11:30 AM";

$date = new DateTime();
$date->setTimestamp(strtotime($start));
$date->setDate(date('Y', strtotime($day)), date('m', strtotime($day)), date('d', strtotime($day)));

// same for $end...

有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

这个怎么样(见DateTime documentation):

    <?php

    $day = "2011-06-24";
    $start = "10:00 AM";
    $end = "11:00 AM";

    $startdate = DateTime::createFromFormat('Y-m-d g:i A', $day.' '.$start, new DateTimeZone('UTC'));
    $enddate = DateTime::createFromFormat('Y-m-d g:i A', $day.' '.$end, new DateTimeZone('UTC'));
    //date('c') generates ISO 8601 formatted date
    echo 'From ', $startdate->format('c'), ' to ', $enddate->format('c'), '.';

编辑:添加了时区。

答案 1 :(得分:1)

$date = DateTime::createFromFormat('Y-m-d', '2011-06-24');

根据您的需要调整参数,具体取决于您传递的参数。