如何在此PHP代码中使AM / PM正常工作?

时间:2018-10-24 14:52:56

标签: php datetime

我在网站的后端有一个表单可以创建事件。用户选择事件的日期,时间以及上午或下午。但是,这在正常工作,但是一旦用户提交了数据,在某些涉及12:00的情况下,PM将从正面更改为AM。我相信这与日期有关...原因是,如果我尝试创建一个从12:00 PM开始并在9:00 PM结束的事件,它将自动将12:00 PM更改为AM。 / p>

如果我尝试创建一个开始时间为12:00 AM,结束时间为9:00 AM的事件,则会将12:00 AM更改为PM。服务器上的日期有问题吗?

在数据库中,时间的存储方式如下:12:00 AM 00:00:00和12:00:00 PM。

代码如下:

// Add a new event.
if (isset($_POST['add-event-submit']))
{
    $upload_ext    =  pathinfo('../globals/uploads/events/'.basename($_FILES['event-image']['name']),PATHINFO_EXTENSION);
    $upload_name   =  'image-'.date('mdyHis').uniqid().'.'.$upload_ext;
    $upload_path   =  '../globals/uploads/events/'.$upload_name;

    $event_name         =  iconv('UTF-8', 'ASCII//TRANSLIT', $_POST['event-name']);
    $event_type         =  iconv('UTF-8', 'ASCII//TRANSLIT', $_POST['event-type']);
    $event_description  =  iconv('UTF-8', 'ASCII//TRANSLIT', $_POST['event-description']);
    $event_image        =  $upload_name;

    $event_start_date   =  date('Y-m-d', strtotime($_POST['event-start-date']));
    $event_end_date     =  date('Y-m-d', strtotime($_POST['event-end-date']));

    $event_start_ampm     =  $_POST['event-start-ampm'];
    if ($event_start_ampm == 'am') { $event_start_time = date('h:i:s', strtotime($_POST['event-start-time'])); }
    if ($event_start_ampm == 'pm') { $event_start_time = date('H:i:s', strtotime($_POST['event-start-time']) + 43200); }
    $event_full_start     = $event_start_date.' '.$event_start_time;

    $event_end_ampm       =  $_POST['event-end-ampm'];
    if ($event_end_ampm   == 'am') { $event_end_time   = date('h:i:s', strtotime($_POST['event-end-time'])); }
    if ($event_end_ampm   == 'pm') { $event_end_time   = date('H:i:s', strtotime($_POST['event-end-time']) + 43200); }
    $event_full_end       = $event_end_date.' '.$event_end_time;

我是否应该使用类似这样的东西(即使这必须是一种解决方法):

$time = $_POST['event-start-time'];
$am = 'am';
$pm = 'pm';

$time_code = $time . $am; //add am or pm depending on user selection
$event_start_time   = date('h:i a', strtotime($time_code));

1 个答案:

答案 0 :(得分:1)

原来,我在找错地方了!我刚刚在下拉菜单中更新了12:00的值。它被设置为12:00而不是00:00,这是添加12小时(+4300)时的计算结果。现在可以正常工作了!