Php date strotime()计算返回1969年的日期

Php date strotime()计算返回1969年的日期,php,datetime,Php,Datetime,我有以下代码从HTML表单获取$\u POST: <?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 '-'

我有以下代码从HTML表单获取
$\u POST

<?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";
?>

我认为您是在滥用strotime对作为字符串提供的日期和时间执行计算?试试这门课。它有一个方法

例如:

$date = new DateTime(); // now
$date->modify('+2 hours'); // add two hours
echo $date->format('l, Y-M-d H:i:s');

如果您不想将编程方法更改为面向对象,这应该可以做到。

您在strotime()中的值不能被php解释为有效的日期字符串

发生这种情况时,php使用时间戳0,即1970-1-100:00:00。 你从1969-12-3119:00:00的日期减去5小时(你的时区)

试试这个:

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

提供给
strotime
的字符串无效。您开始了双引号,但没有正确结束:

    $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
您可以这样做来解决它:

<?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

这会适应变量吗?比如说,代替
(“+2小时”)
我写的
($travelTimeOperator.$timeAmount.''.$travelTimeInterval)
或类似的东西?是的,它会,但别忘了验证/过滤你在
修改中输入的内容。如果输入无效,它将抛出警告并返回
false
。这是一个很好的答案+1您应该退房:)
<?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
<?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