我试图找到一个脚本,它将日期舍入到最近的一天并告诉我它们之间有多少天不同。希望它像这样返回:
0 =今天 1 =昨天 2 = 2天前... 你明白了这个想法
这是我到目前为止所得到的。
$delta = ((strtotime(date('d/m/y', time())) - strtotime(date('d/m/y', $time))))/86400;
但这会像这样返回:
0 =今天 30 =昨天 61 =前一天......
它让我疯了.....
答案 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
。