我试图找到当前日期和时间,转换为unix时间戳,然后减去以前的时间。我尝试了多种方法,但收到了错误或不正确的值。到目前为止,这是我的代码:
// Current date and time
$currentTime = date("Y-m-d H:i:s");
// Convert datetime to Unix timestamp
$currentTimestamp = strtotime($currentTime);
// Create previous date and time
$previousTime = new DateTime("2021-04-17 13:00:00");
// Specify display format
$previousTime->format('Y-m-d H:i:s');
// Convert to Unix timestamp
$previousTimestamp = strtotime($previousTime);
// Subtract previous time from current time
$time = $currentTimestamp - $previousTimestamp;
// Display result
echo $time;
因此,如果当前日期和时间是例如:2021-04-17 14:00:00,而上一个日期和时间为2021-04-1713:00:00,那么结果应该是3600。或者,如果有两个小时的间隔,那么它是7200,等等。根据当前的代码,我得到的错误是:
未捕获类型错误:strtotime((:参数#1($datetime(必须为类型字符串,DateTime
我尝试过的其他代码没有返回正确的时间差,或者引发了其他错误。如何获得正确的时差?
您需要阅读文档,了解每个函数期望作为参数的内容以及每个函数返回的内容。您将时间戳(一个整数(与DateTime对象混合在一起。如果要进行日期计算,则需要对两者使用相同的格式。由于您正在寻找秒数差异,因此使用时间戳整数可能更简单。
此代码为您提供一个整数时间戳:
$currentTime = date("Y-m-d H:i:s");
$currentTimestamp = strtotime($currentTime);
但请注意,";现在";是time()
函数的默认返回值,因此您可以改为执行以下操作:
$currentTimestamp = time();
你不需要这个:
// This gives you a DateTime object
$previousTime = new DateTime("2021-04-17 13:00:00");
// This doesn't change the internal representation,
// it just returns a value that you're not using.
$previousTime->format('Y-m-d H:i:s');
// This function expects a string, but you're giving an object.
$previousTimestamp = strtotime($previousTime);
相反,您可以直接将格式化的日期字符串传递给strtotime()
,它将返回一个整数时间戳:
$previousTimestamp = strtotime("2021-04-17 13:00:00");
现在你有两个整数代表秒,所以你可以减去它们,得到两者之间的秒数。您的程序变成:
$currentTimestamp = time();
$previousTimestamp = strtotime("2021-04-17 13:00:00");
$diff = $currentTimestamp - $previousTimestamp;
echo $diff;
或者只是:
echo time() - strtotime("2021-04-17 13:00:00");