我有一个包含以下内容的表:本周如果date()函数和日期从mysqli的
StartWeek | StartName |
2012-07-16 | 1 |
我想做的事情。是采取开始的一周,当前的日期,并计算从现在到现在之间经过了多少时间。
到目前为止,我有这样的:
function getCurrentWeekName() {
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
if (!$mysqli) {
die('There was a problem connecting to the database.');
}
else {
date_default_timezone_set('UTC');
echo "Current date: ".$current_date = date('Y-m-j')."<br>";
$mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
$query = $mysqli->prepare("SELECT StartWeek FROM Week");
$query->execute();
$query->bind_result($start_date);
while ($query->fetch()){
$start_date = $start_date;
}
echo "start date: ".$start_date."<br>";
echo "time passed: ".$time_passed = strtotime($current_date) - strtotime($start_date)."<br>";
echo "number of days since start: ".$num_of_days = ceil($time_passed/(86400*7))."<br>";
$week_num = ceil($num_of_days/7);
$query = $mysqli->prepare("SELECT StartName FROM Week");
$query->execute();
$query->bind_result($start_name);
while ($query->fetch()){
echo "Start name: ".$start_name = $start_name."<br>";
}
$week_num = $start_name + $week_num;
echo "Week Number: ".$week_num;
}
$mysqli->close();
}
的问题是,这将返回以下信息:
Current date: 2013-03-18
start date: 2012-07-16
time passed: -1342394787
number of days since start: -2219
Start name: 1
Week Number: -316
所以很明显我做错了。我认为这一定与我的计算时间有关,也许我不应该使用strtotime。任何人都可以帮忙吗?
很奇怪 - 这将是有趣的是分别查看'strtotime($ current_date)'和'strtotime($ start_date)'的输出,因为在那里看起来有些错误。 – fvu 2013-03-18 21:37:56
有趣的是: strtotime current_date: strtotime start_date:1342396800 因此,在strtotime之后current_date没有出现,可能是因为它是用date()创建的? – 2013-03-18 21:46:27
@david:nope。它只是一个字符串,一旦它出现过时。当我在上面的示例日期中执行strtotime()时,我将'21168000'作为diff。一个很大的缺陷:你在'$ num_of_days'(里面有一个'/ 7')计算周,然后在你的周计算中再次除以7。在MySQL中使用datediff会给我245天,这是35周。 – 2013-03-18 21:49:34