在PHP中比较两个日期

时间:2012-08-14 03:03:09

标签: php date datepicker

我在比较两个日期时遇到了问题。用户将从Datepicker中选择日期格式('Y-m-d')。如果输入不等于当前日期,则会显示错误消息,否则将显示输出。

我有这段代码:

$today = date("Y-m-d");
$date = $_REQUEST['selected_date']; // date selected
$first = strtotime($today);             
$second = strtotime($date);

if ($first != $second){
    //error message 
}else{
    //some code
}       

这在本地工作正常但是当我尝试上传它时,它不再工作了。相反,可以接受上一个日期而不是当前日期。

3 个答案:

答案 0 :(得分:3)

服务器上的时区可能与本地计算机的时区设置不同。

尝试打印$first$second的值。

如果您使用任何旧式PHP日期函数(datestrtotime等),您可以(并且应该)使用date_default_timezone_set()设置PHP使用的时区。

虽然我建议使用DateTime&使用新代码的DateTimeZone类,它们更适合使用,特别是如果您正在做涉及多个时区的任何事情。

答案 1 :(得分:0)

服务器是否有可能处于与请求来源不同的时区?我认为这可能会导致不匹配。

答案 2 :(得分:0)

希望我能正确理解你的情况。直接攻击此操作会失败很多次,因为服务器时区(通过date()获得)将与客户端时区不同。要避免此问题,您需要通过javascript将客户端时间发送到您的服务器。 jQuery示例可能如下所示:

var date = new Date();

$.post("index.php", { today: (today.getMonth() + 1) + "/" + today.getDate() + "/" + today.getFullYear()}, function(data) {

alert(data); //server response here

});

在服务器上,您通过$_POST['today']将客户端今天的日期作为字符串。然后,您可以决定如何处理它并将其输出到您的客户端。

或者,您所描述的问题可以通过JavaScript解决,而无需将其发送到您的服务器,除非您想在服务器上执行某些操作