【发布时间】:2015-09-10 16:17:08
【问题描述】:
我在这里有一个表单 (https://nursinggroup.com/pharmacist-profile/),用户将在其中为机器人输入“mm / yy”形式的日期,“from”输入框和“to”输入框。在用户完成并添加所有日期后,他们提交表单并使用 Gravity Forms PDF Extended (mPDF) 创建 PDF。我需要做的是,在创建 PDF 期间,我需要它来计算每个项目的值并将每个项目的总年数吐出到 PDF 上。
例如,如果我在在线表格中输入以下条目:
Ambulatory Care "From: 02 / 88" "To: 02 / 98"
Home Healthcare "From: 07 / 02" "To: 07 / 05"
Oncology "From: 09 / 06" "To: 05 / 12"
在 PDF 上它会吐出以下内容:
Ambulatory Care 10
Home Healthcare 3
Oncology 5.8
我已经通读并尝试了许多不同的代码示例,但我对这种类型的 PHP 的熟练程度不足以完成这项工作。还有一些其他的事情要记住。这是在 WordPress 网站上,使用 Gravity Forms 作为表单,使用 Gravity Forms PDF Extended 从这些表单创建 PDF。还有一点需要注意的是,年份的输入必须保持yy格式而不是yyyy用户也不填写一天,只有mm / yy
<?php
// Set timezone
date_default_timezone_set("UTC");
// Time format is UNIX timestamp or
// PHP strtotime compatible strings
function dateDiff($time1, $time2, $precision = 6) {
// If not numeric then convert texts to unix timestamps
if (!is_int($time1)) {
$time1 = strtotime($time1);
}
if (!is_int($time2)) {
$time2 = strtotime($time2);
}
// If time1 is bigger than time2
// Then swap time1 and time2
if ($time1 > $time2) {
$ttime = $time1;
$time1 = $time2;
$time2 = $ttime;
}
// Set up intervals and diffs arrays
$intervals = array('year','month','day','hour','minute','second');
$diffs = array();
// Loop thru all intervals
foreach ($intervals as $interval) {
// Create temp time from time1 and interval
$ttime = strtotime('+1 ' . $interval, $time1);
// Set initial values
$add = 1;
$looped = 0;
// Loop until temp time is smaller than time2
while ($time2 >= $ttime) {
// Create new temp time from time1 and interval
$add++;
$ttime = strtotime("+" . $add . " " . $interval, $time1);
$looped++;
}
$time1 = strtotime("+" . $looped . " " . $interval, $time1);
$diffs[$interval] = $looped;
}
$count = 0;
$times = array();
// Loop thru all diffs
foreach ($diffs as $interval => $value) {
// Break if we have needed precission
if ($count >= $precision) {
break;
}
// Add value and interval
// if value is bigger than 0
if ($value > 0) {
// Add s if value is not 1
if ($value != 1) {
$interval .= "s";
}
// Add value and interval to times array
$times[] = $value . " " . $interval;
$count++;
}
}
// Return string with times
return implode(", ", $times);
}
?>
【问题讨论】:
-
这种格式是固定的吗?解析输入
#^From: (\d{2}) / (\d{2})$#、#^To: (\d{2}) / (\d{2})$#并查看 DateTime、DateDiff 和 DateInterval 类。 -
格式是固定的,不能更改。我现在就来看看这些,我已经有了,但我还没有完全想好让这段代码工作。不够熟练,无法从头开始编写它,而且我在使用您上面提到的那些类来操作其他人的现有代码时遇到了困难。
-
那么您在寻找什么?可以用来进行计算的函数?或者你有没有看过表单句柄代码?
-
我想我需要的是一个函数。现在我已经对整个文件进行了编码,调用了数据库中的所有表单条目,并将它们打印在 PDF 上。基本上我想我需要的是一个函数,它将获取“开始”日期和“结束”日期变量并吐出它们之间的年数,为该数字分配一个变量,然后我可以从那里完成其余的工作。
-
您知道 SO 可以帮助您解决问题……您自己吗?发布您尝试过的内容,我们可能会告诉您出了什么问题。另外,你在哪里划出哪个两位数年份属于 1900 年,哪个属于 2000 年? 01 / 50 是 1950 年还是 2050 年?