在php中减去2个日期后的结果不正确

时间:2018-02-17 11:18:46

标签: php

$todays_date     =  date('d-m-y');  //17-2-18
$return_date     =  "16-02-18"; //day-month-year
$todays_datesec  =  strtotime($todays_date);
$return_datesec  =  strtotime($return_date);
$diff            =  $todays_datesec - $return_datesec;
$days            =  $diff/86400; 
echo $days 

上面的代码显示的值为-363,这是不正确的。应该是1,请帮忙。

3 个答案:

答案 0 :(得分:1)

strtotime()功能不支持您给出的日期格式。使用php DateTime::createFromFormat17-02-18 | | |___Year | |___Month |___Date 格式创建日期。

在你的例子中,它将是

$todays_date = DateTime::createFromFormat('d-m-y', '17-02-18');
$return_date = DateTime::createFromFormat('d-m-y', '16-02-18');
$diff = $return_date->diff($todays_date);
echo "Days :".$diff->days;

示例代码

dd.mm.yy

Live demo

只有一种格式支持date $todays_date="17.02.18"; $return_date="13.02.18"; $returnsecs=strtotime($return_date); $todayssecs=strtotime($todays_date); $daysleft= $todayssecs - $returnsecs; $r = (int)($daysleft/3600); echo "Result : ".$r; ,因此您可以使用下面的代码

ThreadStart starter;
Thread worker_thread = null;

starter = Work;
starter += () => { AnotherWork();};
worker_thread = new Thread(starter) { IsBackground = true };
worker_thread.Start();

[上述代码演示] https://eval.in/957940

答案 1 :(得分:0)

试试这个:

$todayDate = date('d-m-Y');
echo $todayDate;

输出:

17-02-2018

如果您输入' Y',如果您使用' y',则年份将以4位数字显示。年份将是2位数。

你可以看看here

答案 2 :(得分:0)

$return_date="16-02-18";
如果您尝试这样做,

不是strtotime()的正确日期格式:

$return_date = date('d-m-Y', strtotime($return_date));

您将获得18-02-2016,而且日期不正确

如果您无法更改输入数据格式,可以先通过字符串操作进行修改,如下所示:

$return_date = substr_replace($return_date , '20', strlen($return_date)-2, 0);

我假设你只处理2000以上的日期