舍入日期并找到不同的

时间:2012-03-07 12:35:36

标签: php

我试图找到一个脚本,它将日期舍入到最近的一天并告诉我它们之间有多少天不同。希望它像这样返回:

0 =今天 1 =昨天 2 = 2天前... 你明白了这个想法

这是我到目前为止所得到的。

$delta = ((strtotime(date('d/m/y', time())) - strtotime(date('d/m/y', $time))))/86400;

但这会像这样返回:

0 =今天 30 =昨天 61 =前一天......

它让我疯了.....

3 个答案:

答案 0 :(得分:1)

您可以使用日期函数的格式切换月份和日期,因为/用作美国格式的分隔符..因此它变为:

$delta = ((strtotime(date('m/d/y', time())) - strtotime(date('m/d/y', $time))))/86400;

这应该是您所需要的所有内容,但为了让您更容易阅读,您可以通过

开始当天的活动
$current_day_start = mktime(0, 0, 0);

而不是

((strtotime(date('m/d/y', time()))

前几天你可以这样做:

$other_day_start = mktime(0, 0, 0, date('n', $time), date('j', $time), date('Y', $time));

所以delta将是

$delta = ($current_day_start - $other_day_start)/86400;

答案 1 :(得分:0)

尝试使用unix timstamp并按照以下方式执行操作:

$now = time();
$nearest_day = ....; //a unix timestamp value

//Use "abs" in case nearest day is in the past

$diff =  abs($now - $nearest_day) / (60*60*24);
echo floor($diff);

适合你吗?

答案 2 :(得分:0)

尝试使用格式date('Y-m-d', $dateStr)(注意年,月,日的顺序),因为这是PHP日期操作和ISO8601符号之一的首选格式。

此外,您发布的代码存在问题。不需要这个:date('d/m/y', $time),因为$ time我认为是一个字符串。它实际上抛出了一个通知。请参阅以下工作代码:

$timeStr = '2012-03-06';

$delta = abs((strtotime(date('Y-m-d', time())) - strtotime($timeStr)))/(60*60*24);

echo $delta;

应输出1,因为当前日期为2012-03-07