date strtotime()计算返回1969日期

Phr*_*cis 2 php datetime

$_POST从HTML表单获取以下代码:

<?php
$departureTime = date("l, Y-M-d H:i:s");
// calculate time-traveled time
$arrivalTime = date( "l, Y-M-d H:i:s", strtotime(
        "$departureTime
        .' '
        .$travelTimeOperator        // '+' or '-'
        .$timeAmount            // integer or decimal (tested with integer)
        .' '
        .$travelTimeInterval") );   // 'days' or 'hours'

echo "$timeAmount, $departureTime, $arrivalTime";
?>
Run Code Online (Sandbox Code Playgroud)

我得到下面的输出,用3我的$timeAmount,-我的运营商和days$travelTimeInterval:

3,星期五,2014年10月17日04:36:43,星期三,1969年12月31日19:00:00

我怎样才能修复1969年的日期?我读过一些关于Unix时间戳的内容,但我无法让它工作.在这种情况下,它旨在减去3天.1969-Dec-31 19:00:00如果我尝试添加天,我会得到完全相同的值.

PS:我在连接中使用了换行符,以便更容易进行故障排除,我意识到它不是标准的.

Ped*_*uto 5

提供的字符串strtotime无效.你开始双引号,但你没有正确结束它:

    $departureTime = date("l, Y-M-d H:i:s");
$travelTimeOperator = '+';
$timeAmount = 1;
$travelTimeInterval = 'days';
$departureTimeString = "$departureTime
        .' '
        .$travelTimeOperator        // '+' or '-'
        .$timeAmount            // integer or decimal (tested with integer)
        .' '
        .$travelTimeInterval";
echo $departureTimeString;
// Friday, 2014-Oct-17 11:20:43 .' ' .+ // '+' or '-' .1 // integer or decimal (tested with integer) .' ' .days
Run Code Online (Sandbox Code Playgroud)

你可以做这样的事情来解决它:

<?php
$departureTime = date("l, Y-M-d H:i:s");

$travelTimeOperator = '+';
$timeAmount = 1;
$travelTimeInterval = 'days';
$departureTimeString = "$departureTime "
                       . $travelTimeOperator
                       . $timeAmount
                       . " $travelTimeInterval";
$arrivalTime = date( "l, Y-M-d H:i:s", strtotime($departureTimeString));

echo "$timeAmount, $departureTime, $arrivalTime";
// 1, Friday, 2014-Oct-17 11:22:23, Saturday, 2014-Oct-18 11:22:23
Run Code Online (Sandbox Code Playgroud)

使用面向对象的功能,您可以执行以下操作:

<?php
$departureTime = new DateTimeImmutable();

$travelTimeOperator = '+';
$timeAmount = 1;
$travelTimeInterval = 'days';
$relativeDateString = "{$travelTimeOperator}{$timeAmount} $travelTimeInterval";
$arriveTime = $departureTime->modify($relativeDateString);

echo $arriveTime->format('l, Y-M-d H:i:s');
// Saturday, 2014-Oct-18 11:26:15
Run Code Online (Sandbox Code Playgroud)

  • 嗯,这是一个很好的答案!+1,你应该看看[codereview.se] :) (2认同)