Php 过几天
我想得到一个日期时间从今天算起的绝对天数。例如,我想知道距离某个日期还有2天,还是78天,甚至是5239天(不太可能,但你明白了)。我使用的是一个MS SQL数据库,它返回日期时间,其中时间组件都是00:00:00 date_diff返回相对值,然后您必须对这些值进行疯狂的计算,以获得计算月份、年份等所需的绝对日期 另外,我在php中获取今天日期的日期组件时遇到问题 编辑: 谢谢w先生。这就是我的结局:Php 过几天,php,sql-server,datetime,Php,Sql Server,Datetime,我想得到一个日期时间从今天算起的绝对天数。例如,我想知道距离某个日期还有2天,还是78天,甚至是5239天(不太可能,但你明白了)。我使用的是一个MS SQL数据库,它返回日期时间,其中时间组件都是00:00:00 date_diff返回相对值,然后您必须对这些值进行疯狂的计算,以获得计算月份、年份等所需的绝对日期 另外,我在php中获取今天日期的日期组件时遇到问题 编辑: 谢谢w先生。这就是我的结局: $date = $row['AirdateDateTime']; $toda
$date = $row['AirdateDateTime'];
$today = date_create(date("Y-m-d"));
$away = date_diff($today, $date);
$d = $away->format("%R%a");
date_create()部分是我最初缺少的转换为实际日期时间的部分。此外,格式需要是
%R%a
。使用%R%d
仅适用于本月的日期。听起来您想要的是
<?php
$yourDate = '2010-10-05';
echo ciel((strtotime($yourDate) - time()) / 60 / 60 / 24);
将时间戳转换为unix时间戳(自1970年以来的秒数)并获得差异可能是最容易的
strotime()和time()
是您的朋友。除了已经提出的建议之外,还有一种选择是图书馆:
date_diff()函数(实际上是DateTime::diff()方法)就是您想要的,实际上并不难。事实上,我认为文档中的示例正是您想要的:
<?php
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%d days');
?>
或
返回的是一个DateInterval对象,您可以使用它的format()方法以任何方式格式化它。上面,它被格式化为天,但是你有很多选择;看
你不需要自己做任何数学题
[编辑-忘记此部分]
对于获取今天日期的日期组件,您可以执行以下操作:
<?php
echo date('Y-m-d');
?>
请参阅。试试这个
$date1=新日期时间('2012-10-28 00:00:00',新日期时区('欧洲/伦敦');
$date2=新日期时间('2012-10-28 03:00:00',新日期时区('欧洲/伦敦');
$interval=date_diff($date1,$date2);
$format=%y年、%m月、%d天、%h小时、%i分钟、%s秒、%a总天数%R';
echo$interval->format($format)代码>这里唯一的问题是时区和DST,但明智的数据库无论如何只包含UTC日期时间(可能在单独的列中包含一个时区偏移量)。这在45天内有效,还是只打印15?它将返回任何差异-它是在运行时计算的。将%d替换为以天为单位测量的差值;对于其他单位,使用其他令牌。我在回答中引用的文档给出了这方面的详细信息。为什么它只打印15
?我想它会返回15,因为$interval->d返回15,就像15天加1个月一样。虽然我没有告诉你,但我是对的。将该日期更改为'2010-11-25'
,结果将为18天。格式必须是%a
我以前使用过此方法,但没有尝试过格式方法。我的目标是从中得到一个有符号整数。我假设我可以稍微修改一下这段代码并使其生效%R标记在days值前面加上“+”或“-”,因此输出可能类似于“+3天”或“-2天”。如果您只需要负号,请使用小写字母“r”(即“%r%d天”)。如果您不想要标签部分,只需坚持使用“%R%d”或“%R%d”。这就是我的想法。这很有效,谢谢。如果有人感兴趣,我使用的完整代码可以在我的帖子中找到。至于你文章的第二部分,我已经试过了,但它不起作用,你需要在它前面加上date\u create()。我还尝试了getdate(),但也不起作用。我刚刚意识到这仍然不正确,因为有一个轻微的格式错误:格式必须是%R%a
。使用%R%d
仅适用于本月的日期。您知道,这与我遇到的问题类似。返回“3”,但距离该日期只有2天了。或者更准确地说,还有两天。如果将round()替换为floor()并将结果乘以-1,或者将参数的顺序替换为ceil()并将round()替换为ceil(),则此函数是正确的。
<?php
$datetime1 = date_create('2009-10-11');
$datetime2 = date_create('2009-10-13');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%d days');
?>
<?php
echo date('Y-m-d');
?>