我在比较两个日期时遇到了问题。用户将从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
}
这在本地工作正常但是当我尝试上传它时,它不再工作了。相反,可以接受上一个日期而不是当前日期。
答案 0 :(得分:3)
服务器上的时区可能与本地计算机的时区设置不同。
尝试打印$first
和$second
的值。
如果您使用任何旧式PHP日期函数(date
,strtotime
等),您可以(并且应该)使用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解决,而无需将其发送到您的服务器,除非您想在服务器上执行某些操作