1

不,这不是日期之间的标准 +86400 秒。

$start_time = strtotime("2012-01-15 23:59");
$end_time = strtotime("2012-01-16 00:05");

$daysInBetweenTimestamps = ?

这就是我目前面临的问题,因为时间戳可能在 5 分钟到 5 小时的时间跨度之间,例如,使用标准 +86400 来查看它是否超过一天是行不通的,并且由于大量的索引我正在做我想看看是否有更有效的方法来检查新的一天是否已经开始,而不是在第二级执行 date("d") > $prevDay。

更新第一个示例的测试:

echo "Absolute Start: ".date("Y-m-d H:i:s",$start)."<br />";
echo "Absolute End: ".date("Y-m-d H:i:s",$end)."<br />";
echo "Interval Used: $interval(seconds) OR ".($interval / 60)."(minutes)<br />";
$numberOfIntervals = ceil(($end - $start) / $interval);
echo "Number of intervals:$numberOfIntervals<br /><br />";
if ($numberOfIntervals > 0){
    for ($i = 0; $i < $numberOfIntervals; $i++){
        $curStart = $start + ($interval * $i);
        $curEnd = $curStart + $interval;
        if ($curEnd > $end){$curEnd = $end;}
        echo "Interval Start DateTime: ".date("Y-m-d H:i:s",$curStart)."<br />";
        echo "Interval End DateTime: ".date("Y-m-d H:i:s",$curEnd)."<br />";
/* EXAMPLE PHP5.3 DateTime START - NOT WORKING */
        $startDiff = new DateTime("@$curStart");
        $endDiff = new DateTime("@$curEnd");
        $diff = $startDiff->diff($endDiff);
        echo $diff->format("%a") . " days<br />";
        if ($diff->format("%a") > 0){
/* EXAMPLE PHP5.3 DateTime END */
/* EXAMPLE Julian START - WORKS */
            $days = unixtojd($curEnd) - unixtojd($curStart);
            echo "Number of days:$days<br />";
            if ($days > 0){
/* EXAMPLE Julian END */
                // Multiple days so the log files are split
                echo "Multiple days so log files are split<br />";
            }else{
                echo "Single day so log files are NOT split<br />";
            }
        }
    }

输出如下所示:

Absolute Start: 2012-01-25 23:59:00
Absolute End: 2012-01-26 00:02:00
Interval Used: 180(seconds) OR 3(minutes)
Number of intervals:1
Interval Start DateTime: 2012-01-25 23:59:00
Interval End DateTime: 2012-01-26 00:02:00

=== 示例 1 开始 ===

0 days
Single day so log files are NOT split

我只是在差异上遗漏了一些东西吗?

=== 示例 1 结束 ===

=== 示例 3 开始 ===

Number of days:1
Multiple days so log files are split

=== 示例 3 结束 ===

4

5 回答 5

2

使用 php5.3 的DateInterval类:

$now = new DateTime();
$then = new DateTime("@123456789"); //this is your timestamp

$diff = $now->diff($then);

echo "then: " . $then->format("Y-m-d") . "\n";
echo $diff->format("%a") . " days\n";

输出:

then: 1973-11-29
13937 days
于 2012-01-27T15:28:19.237 回答
2

使用儒略日

$days = unixtojd($t1) - unixtojd($t2);

或者如果您不在UTC...

$days = unixtojd($t1 - $tz) - unixtojd($t2 - $tz);

$tz您的时区偏移量在哪里,以秒为单位。

于 2012-01-27T15:37:36.987 回答
0

将时间戳向下舍入到最接近的 86400 秒,取差值,然后除以 86400:

$start_time = strtotime("2012-01-15 23:59");
$end_time = strtotime("2012-01-16 00:05");

$start_time -= $start_time % 86400;
$end_time -= $end_time % 86400;

$days = ($end_time - $start_time) / 86400;

向下舍入使每个时间戳成为当天的午夜,除法为您提供自纪元以来的天数。不过,这仅适用于 UTC。

于 2012-01-27T15:24:04.227 回答
0
<?php
$start_time = strtotime("2012-01-15 23:59");
$end_time = strtotime("2012-01-16 00:05");

$time_zone = 19800; # My time zone: UTC+0530 hours = UTC+19800 seconds

$days = intval(($end_time + $time_zone) / 86400) -
        intval(($start_time + $time_zone) / 86400);

echo "$days\n";
?>
于 2012-01-27T15:30:42.210 回答
0
$current_time = time(); // or your date as well
$your_date = strtotime("2020-04-27"); //this is my submit time.

$date_diff = $current_time - $your_date;
$num_of_days = round($date_diff / (60 * 60 * 24));

//you have your answer in $num_of_days variable
于 2020-04-27T12:33:37.600 回答