作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 php 从 mysql 表中获取数据来计算财政年度。
要求是在每个财政年度(3 月 31 日至 4 月 1 日)计算学生分数。是否可以制作任何每年自行计算这些日期的函数?
我的学生考试成绩表正在存储考试日期(2012 年 9 月 2 日),它也有今年(2011 年 9 月 2 日)同一名学生的旧记录。我只想退出当年。直到现在我无法得到这个,这是我的代码:-
$result1 = mysql_query(
"SELECT SUM(score), SUM(score_from)
FROM school_test_report, school_students
WHERE (school_test_report.student_id = school_students.student_id and
school_test_report.class=school_students.class)
AND school_test_report.student_id='$id'
AND school_test_report.subject = 'maths'
/* something here to get dates school_test_report.test_date is between 31 march to 1 April */"
)
or die(mysql_error());
$row = mysql_fetch_assoc($result1);
echo $row['SUM(score)'].'/'. $row['SUM(score_from)'];
它给了我一个财政年度的所有结果。
最佳答案
在对日期执行计算时,最好扩展 DateTime类(class)。这样可以将所有日期计算封装在一个地方。随着时间的推移,您将建立一个非常有用的库。
要计算财政年度,您可以这样延长 DateTime:-
class MyDateTime extends DateTime
{
/**
* Calculates start and end date of fiscal year
* @param DateTime $dateToCheck A date withn the year to check
* @return array('start' => timestamp of start date ,'end' => timestamp of end date)
*/
public function fiscalYear()
{
$result = array();
$start = new DateTime();
$start->setTime(0, 0, 0);
$end = new DateTime();
$end->setTime(23, 59, 59);
$year = $this->format('Y');
$start->setDate($year, 4, 1);
if($start <= $this){
$end->setDate($year +1, 3, 31);
} else {
$start->setDate($year - 1, 4, 1);
$end->setDate($year, 3, 31);
}
$result['start'] = $start->getTimestamp();
$result['end'] = $end->getTimestamp();
return $result;
}
}
这将给出一个结果,您可以轻松地将其包含到您的查询中(如果可以,您真的应该将其更改为 mysqli 或 pdo)。
您可以像这样使用新功能:-
$mydate = new MyDateTime(); // will default to the current date time
$mydate->setDate(2011, 3, 31); //if you don't do this
$result = $mydate->fiscalYear();
var_dump(date(DATE_RFC3339, $result['start']));
var_dump(date(DATE_RFC3339, $result['end']));
如果您希望可以修改方法以将开始日期和结束日期作为 DateTime 对象返回:-
$result['start'] = $start;
$result['end'] = $end;
return $result;
然后您可以直接格式化以包含在您的查询中:-
$mydate = new MyDateTime();
$mydate->setDate(2011, 3, 31);
$result = $mydate->fiscalYear();
$start = $result['start']->format('Y M d');
$end = $result['end']->format('Y M d');
请参阅 date formats 的手册
关于PHP计算财政年度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10772629/
我们有一个名为 Revenue 的多维数据集。 SELECT {[Measures].[Billable Hours]} on columns, [Period].[Financia
我想生成给定日期的通用半年开始和结束日期。 如果我有 2019-01-10,我想返回 2018-10-01 & 2019-03-31 如果我有 2019-07-01,我想返回 2019-04-01 &
我是一名优秀的程序员,十分优秀!