Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 过几天_Php_Sql Server_Datetime - Fatal编程技术网

Php 过几天

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

我想得到一个日期时间从今天算起的绝对天数。例如,我想知道距离某个日期还有2天,还是78天,甚至是5239天(不太可能,但你明白了)。我使用的是一个MS SQL数据库,它返回日期时间,其中时间组件都是00:00:00

date_diff返回相对值,然后您必须对这些值进行疯狂的计算,以获得计算月份、年份等所需的绝对日期

另外,我在php中获取今天日期的日期组件时遇到问题

编辑: 谢谢w先生。这就是我的结局:

    $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');
?>