gpt4 book ai didi

php - 不确定我的代码有什么问题

转载 作者:太空宇宙 更新时间:2023-11-04 14:22:06 25 4
gpt4 key购买 nike

我正在使用 php $_GET 传递日期输入

<form action="trigger_date.php" method="get">
Enter Project Turnover date (mm/dd/yy): <input type="string" name="date"> <input type="submit">

在 trigger_date.php 中将其作为

<?php $turnover_date = $_GET['date']; ?>

我做了一些数学运算以将其与今天的日期进行比较

<?php 
$project_turnover = strtotime($turnover_date);
$project_turnover = date ("m/d/y", $project_turnover);
?>
<?php
$datetime1 = date_create($today);
$datetime2 = date_create($project_turnover);
$wks_to_turnover = date_diff($datetime1, $datetime2); // taking the difference between today and project turnover date
$wks_to_turnover = $wks_to_turnover->format('%R%a');
$wks_to_turnover = ($wks_to_turnover/7);
$wks_to_turnover = round($wks_to_turnover,1); //with input of 5/1/14 this should be roughly 24 wks
?>

这是我难过的地方,我的样式是:

<?php
if ($wks_to_turnover > 2) {
echo $date_green; // colors the background green
} elseif (2 > $wks_to_turnover && $wks_to_turnover > 0) {
echo $date_yellow; // colors the background yellow
} elseif (0 >= $wks_to_turnover) {
echo $date_red; //colors the background red
} ?>;

但即使 (24 > 2) 它仍然着色为红色

最佳答案

请注意 <input type="string" />是无效的 HTML -- 您正在寻找 type="text"

date_create接受几种不同格式的日期。 m/d/y您在输入日期使用的格式是错误的格式,因为它不明确。根据手册:

Note:

Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.

To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.

使用 Date 对象支持的标准化日期格式。这可能不是您的问题的原因,但最好在代码中明确。

我不完全确定为什么要将输入转换为 UNIX 时间戳,然后再转换回格式化日期。您可以简单地使用从输入中获得的格式化日期,它似乎是受支持的格式,并处理可能产生的任何错误。

最后,您的数学得出一个负数。 这就是您的逻辑无法按预期运行的原因之一。您可以颠倒传递给 date_diff 的参数顺序。 , 或使用 abs获取两个日期之间的绝对距离。我选择了abs ,这使得代码不关心 2 周是过去还是将来。我不知道你在这里做什么——也许标志很重要。如果是这样,反转传递给 date_diff 的参数顺序

(编辑:OP 澄清 abs 不适合他的需要,相应调整)

综合起来,我建议是这样的:

$datetime1 = date_create('now');
$datetime2 = date_create(
array_key_exists(
'date',
$_GET
) ? $_GET['date'] : 'invalid'
);
if (!$datetime2)
die('invalid date');
$wks_to_turnover = date_diff($datetime2, $datetime1);
$wks_to_turnover = $wks_to_turnover->format('%R%a');
$wks_to_turnover = ($wks_to_turnover/7);
$wks_to_turnover = round($wks_to_turnover,1);be roughly 24 wks

if ($wks_to_turnover <= 0) {
echo 'green';
} elseif ($wks_to_turnover < 2 && $wks_to_turnover > 0) {
echo 'yellow';
} else {
echo 'red';
}

我还调整了 if 的最后一个 block s -- 如果周小于或等于零,则为绿色,如果小于二但大于 0,则为黄色,否则为红色。

试一试:http://codepad.viper-7.com/kLN5jk

文档

关于php - 不确定我的代码有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com