我有一个页面已经调用了SQL数据库,我想根据其中一个条目的条件显示一个div。不过,我无法让这件事对我起作用,我正在努力寻找正确的答案。如果数据库中的过期日期列条目还有一个月,我希望使用JavaScript显示一个名为#expiryDate
的Div。
我可以用<?php echo $data["expires"]; ?>
显示数据库条目但我想做这样的事。。。。
<script type="text/javascript">
$function() {
var subval;
subval = $data["expires"];
if(..........) {
$('#expiryDate').show();
} else {
$('#expiryDate').hide();
}
}};
</script>
但是我不能算出if。我希望它是如果$date["expires"]
中的日期还有一个月,那么。。。。我错过了什么?
演示:http://jsfiddle.net/Lts1rg18/
假设$data["expires"]
是一个日期字符串;
var expDate = new Date(<?php echo "$data['expires']"; ?>);
var now = new Date();
var oneMonthFromNow = new Date(now.getFullYear(), now.getMonth() + 1, now.getDate());
if(expDate <= oneMonthFromNow) {
$('#expiryDate').show();
} else {
$('#expiryDate').hide();
}
我建议将moment.js添加到您的项目中,并尝试以下操作:
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript" src="js/moment.js"></script>
</head>
然后是下面的jQuery:
$(document).ready(function () {
expiryDate();
});
function expiryDate() {
var dbDate = $data["expires"];
var expDate = moment(dbDate).format();
var curDate = moment().format();
var oneb4 = moment(expDate).subtract(1, 'months').format();
if (curDate > oneb4) {
$('#expiryDate').show();
} else {
$('#expiryDate').hide();
}
}
如果可能,请在PHP中执行计算,以避免给客户端浏览器带来压力。
我喜欢Sebbzzz的答案,但个人偏好是我的时间计算发生在时间戳中,所以:
<?php
$strExpiryTimestamp = strtotime($date["expires"]);
/* For mockup purposes */
$intMonth = 1; /* date('n') Gets this month */
$intYear = 2014; /* date('Y') Gets this year */
$intStartOfMonth = mktime(0, 0, 0, $intMonth, 1, $intYear);
if($strExpiryTimestamp < $intStartOfMonth) {
$strOp = 'show';
} else {
$strOp = 'hide';
}
?>
<html>
<body>
<h1>Your HTML</h1>
<script>
$(document).ready(function () {
$('#expiryDate').<?php echo $strOp; ?>();
});
</script>
</body>
</html>
使用上述方法,您可以清楚地看到,计算是在服务器上"顶部"执行的,然后只要$strOp作为变量可用,脚本部分就可以包含在任何位置。
如果您想了解更多关于日期的信息,请查看此处的PHP手册页面