【问题标题】:PHP Adding 15 minutes to Time valuePHP 将 15 分钟添加到时间值
【发布时间】:2013-12-31 15:56:49
【问题描述】:

我有一个接收时间值的表单:

$selectedTime = $_REQUEST['time'];

时间采用这种格式 - 9:15:00 - 即上午 9:15。然后我需要为此添加 15 分钟并将其存储在一个单独的变量中,但我很难过。

我正在尝试使用 strtotime 但没有成功,例如:

$endTime = strtotime("+15 minutes",strtotime($selectedTime)));

但这不会解析。

【问题讨论】:

  • strtotime 将日期转换为时间戳。 9:15:00 不是日期。只需手动拆分并添加 15 分钟
  • @Charlie74:实际上并非如此。这是一个有效的日期,也是唯一的时间

标签: php datetime


【解决方案1】:

您的代码无法正常工作(解析),因为末尾有一个额外的),导致解析错误。数一下,你有 2 个( 和 3 个)。如果你修复它会正常工作,但 strtotime() 返回一个时间戳,所以要获得人类可读的时间,请使用 date()

$selectedTime = "9:15:00";
$endTime = strtotime("+15 minutes", strtotime($selectedTime));
echo date('h:i:s', $endTime);

获取一个能够突出显示语法并显示不匹配的括号、大括号等的编辑器。

只做没有任何 TZ 或 DST 的直接时间并增加 15 分钟(阅读 zerkms 评论):

 $endTime = strtotime($selectedTime) + 900;  //900 = 15 min X 60 sec

不过,) 是这里的主要问题。

【讨论】:

  • 与另一个答案相同的问题 - 如果经过一段时间接近轮班,它将在夏季时钟轮班时失败
  • @zerkms:这就是使用strtotime() 的原因,因为它考虑了夏令时,与加法不同。大多数时候,您希望将 DST 考虑在内。视需求而定。
  • 您不能仅将DST 考虑在内。时间字符串不是日期,因此您无法判断在这种情况下是否需要应用 DST。
【解决方案2】:

虽然您可以通过 PHP 的时间函数来做到这一点,但让我向您介绍 PHP 的 DateTime 类,它连同它的相关类,真的应该在任何 PHP 开发人员的工具包中。

// note this will set to today's current date since you are not specifying it in your passed parameter. This probably doesn't matter if you are just going to add time to it.
$datetime = DateTime::createFromFormat('g:i:s', $selectedTime);
$datetime->modify('+15 minutes');
echo $datetime->format('g:i:s');

请注意,如果您想要做的基本上是提供 12 或 24 小时时钟功能,您可以添加/减去时间并且实际上并不关心日期,因此您希望消除夏令时可能出现的问题次更改这样我会推荐以下格式之一:

!g:i:s 12 小时格式,小时不带前导零

!G:i:s 带前导零的 12 小时格式

注意格式中的! 项。这会将日期组件设置为 Linux 纪元 (1-1-1970) 中的第一天

【讨论】:

  • “如果你只是想给它加点时间,这可能没关系”——夏天呢?
  • @zerkms 我猜这如何处理真的取决于 OP 的需要。如果您只是严格地寻找 12 小时时间添加功能(即您不想考虑夏令时更改),您可以将格式设置为 !g:i:s 以始终将日期设置为纪元时间(1-1-1970 ) 所以你不用担心。
  • “如果你只是严格地看”---不是我,但 OP 正在寻找能够正确地将 15 分钟添加到特定时间字符串的东西。您当前提供的解决方案可能会失败(请参阅 ideone 链接)
  • @zerkms 我的意思是,这可能不会被 OP 视为失败。真的没有解决。我将更新答案以反映 cmets 中给出的!g:i:s 解决方案。
【解决方案3】:

要扩展以前的答案,执行此操作的函数可以像这样工作(根据this for function.datethis for DateInterval 更改时间和间隔格式,但你喜欢它们):

(我也写了alternate form of the below function here。)

// Return adjusted time.

function addMinutesToTime( $time, $plusMinutes ) {

    $time = DateTime::createFromFormat( 'g:i:s', $time );
    $time->add( new DateInterval( 'PT' . ( (integer) $plusMinutes ) . 'M' ) );
    $newTime = $time->format( 'g:i:s' );

    return $newTime;
}

$adjustedTime = addMinutesToTime( '9:15:00', 15 );

echo '<h1>Adjusted Time: ' . $adjustedTime . '</h1>' . PHP_EOL . PHP_EOL;

【讨论】:

    【解决方案4】:

    strtotime返回当前时间戳,日期是格式化时间戳

      $date=strtotime(date("h:i:sa"))+900;//15*60=900 seconds
      $date=date("h:i:sa",$date);
    

    这将使当前时间增加 15 分钟

    【讨论】:

      【解决方案5】:

      获取 20 分钟后的时间和日期

      function add_time($time,$plusMinutes){
      
         $endTime = strtotime("+{$plusMinutes} minutes", strtotime($time));
         return date('h:i:s', $endTime);
      }
      

      20 分钟前日期和时间

      date_default_timezone_set("Asia/Kolkata");
      echo add_time(date("Y-m-d h:i:sa"),20);
      

      【讨论】:

        【解决方案6】:

        你也可以使用下面的代码,很简单。

        $selectedTime = "9:15:00";
        echo date('h:i:s',strtotime($selectedTime . ' +15 minutes'));
        

        【讨论】:

          【解决方案7】:

          当前日期和时间

          $current_date_time = date('Y-m-d H:i:s');
          

          15 分钟前日期和时间

          $newTime = date("Y-m-d H:i:s",strtotime("+15 minutes", strtotime($current_date)));
          

          【讨论】:

            【解决方案8】:

            很简单

            $timestring = '09:15:00';
            echo date('h:i:s', strtotime($timestring) + (15 * 60));
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2017-08-28
              • 2017-08-18
              • 1970-01-01
              • 2013-11-16
              • 2011-12-31
              • 1970-01-01
              • 2022-11-14
              相关资源
              最近更新 更多