使用date()方法选择DATEDIFF()AS DAYS

使用date()方法选择DATEDIFF()AS DAYS

问题描述:

我已经使用DATEDIFF方法来获得两个使用日期(YYYY:mm:DD HH:MM:ss)函数获得的日期的差异,但是获取每次输出0,即使差异超过1天。使用date()方法选择DATEDIFF()AS DAYS

这里是我的代码 -

if(isset($_GET['rt'])) 
{ 
$dateis=$_GET['rt']; 
} 
date_default_timezone_set('Asia/Kolkata'); 
$date = date('Y-m-d H:i:s'); 
if(mysqli_query($conn, "UPDATE issued_books SET Date_returned = '$date' WHERE Book_id = '$bk_id' AND Date_issued = '$dateis'")) 
{ 
    $fine = sprintf("SELECT DATEDIFF('%s','%s') AS DAYS", 
       '$date', '$dateis'); 
    $fine = $fine*10; 
    mysqli_query($conn, "UPDATE member_db SET Fine_amt = (Fine_amt + '$fine') WHERE Member_id = '$mem'"); 
} 

任何有点帮助将是非常感激,谢谢:)

+0

@Tiger我被建议做到这一点,看到这里 - http://stackoverflow.com/a/43111907/7744098 –

+0

不错,但我没有得到预期的结果。 –

+0

那个向我推荐sprintf()解决方案的人使用了硬编码值,正如你在该页面上看到的那样,它对这些值工作正常,但对于那些人来说工作正常,我从date()函数 –

1.去除单引号 '$日期' 和 '$ dateis'

$fine = sprintf("SELECT DATEDIFF('%s','%s') AS DAYS", $date, $dateis); 

2. $fine = $fine*10; //这将不起作用,因为查询还没有在mysql中执行,这就是为什么你总会得到不想要的结果

并始终净化你的参数,以避免SQL注入

+0

这里是你的输出 - SELECT DATEDIFF('2017-03-27 12:35:04','0000-00-00 00:00:00')AS DAYS –

+0

@ParvezKhan $ dateis的价值是多少? > $ dateis = $ _ GET ['rt']; – cletsimon

+0

你应该转换成日期的$值dateis '$ dateis =日期( 'YMD H:I:S',$ _GET [ 'RT']);'或检查它,如果它是一个validate日期 – cletsimon

没关系,我已经找到了答案在这里 - https://stackoverflow.com/a/676828/7744098使用的strtotime()&地板的方法。

谢谢大家的评论。