基于Twig实现图书馆用户逾期借阅统计的技术求助
图书馆订阅者逾期借阅统计(Twig实现方案)
需求说明
- 判断指定订阅者是否存在逾期借阅记录
- 统计逾期借阅的图书数量
订阅者数据示例
array(9) { ["id"]=> string(19) "8235798454376842909" ["username"]=> string(12) "Test xxxx" ["login"]=> string(11) "xxxx" ["role"]=> string(5) "guest" ["account"]=> string(4) "opac" ["details"]=> array(27) { ["lastname"]=> string(7) "xxxx" ["firstname"]=> string(4) "Test" ["subscriptions"]=> array(1) { [0]=> array(12) { ["subscription"]=> array(17) { ["ruleSetsLateLoan"]=> array(1) { [0]=> array(3) { ["id"]=> string(19) "6661733132890635183" ["name"]=> string(16) "Tous docs retard" ["deleted"]=> bool(false) } } } ["endDate"]=> string(10) "06-05-2022" ["startDate"]=> string(10) "06-05-2021" } } ["loans"]=> array(1) { [0]=> array(17) { ["objectType"]=> string(9) "User\\Loan" ["id"]=> string(19) "7348367352886005629" ["startDate"]=> string(10) "20-10-2021" ["endDate"]=> string(10) "10-11-2021" ["returnDate"]=> NULL ["returnLibrary"]=> string(22) "Bibliothèque Brassens" ["extendable"]=> bool(true) ["nonExtendabilityReason"]=> NULL ["bibrecordId"]=> string(18) "224787138527266506" ["bibrecordTitle"]=> string(33) "La jeune fille et la nuit : roman" ["bibrecordResponsibles"]=> string(15) "Guillaume Musso" ["bibrecordEditor"]=> string(13) "Calmann-Lévy" ["bibrecordPublishedDate"]=> NULL ["isElectronical"]=> bool(false) ["bibrecordCode"]=> string(13) "9782702163634" ["bibrecordType"]=> string(5) "Texte" ["late"]=> bool(true) } } ["subenddate"]=> string(10) "06-05-2022" } }
Twig实现代码及说明
核心实现脚本
{# 初始化逾期计数器 #} {% set overdue_count = 0 %} {# 遍历所有借阅记录 #} {% for loan in user.details.loans %} {# 将字符串格式的截止日期转为时间戳(避免字符串比较的格式问题)#} {% set loan_end_timestamp = loan.endDate|date('U') %} {# 获取当前日期的时间戳 #} {% set current_timestamp = 'now'|date('U') %} {# 判断条件:截止日期早于当前日期,且图书未归还 #} {% if loan_end_timestamp < current_timestamp and loan.returnDate is null %} {% set overdue_count = overdue_count + 1 %} {% endif %} {% endfor %} {# 输出统计结果 #} <div class="overdue-status"> {% if overdue_count > 0 %} <p>该订阅者共有 <strong>{{ overdue_count }}</strong> 本逾期图书</p> {% else %} <p>该订阅者无逾期借阅记录</p> {% endif %} </div>
关键步骤解释
- 计数器初始化:用
set标签创建overdue_count变量,初始值为0,用于累计逾期数量。 - 遍历借阅记录:通过
for循环遍历订阅者的details.loans数组,处理每一条借阅数据。 - 日期转换与比较:
- 用
date('U')将借阅截止日期(字符串)和当前日期转为时间戳,避免字符串格式不一致导致的比较错误。 - 时间戳是从1970年1月1日至今的秒数,数值比较更准确可靠。
- 用
- 逾期判断逻辑:只有当借阅截止日期早于当前日期,且图书未归还(
returnDate为NULL)时,才计入逾期统计。 - 结果输出:根据计数器的值,显示对应的逾期状态提示,用
<strong>强调逾期数量。
备选方案(字符串格式比较)
如果你的Twig环境无法使用时间戳,也可以统一日期格式后直接比较字符串:
{% set loan_end_date = loan.endDate|date('Y-m-d') %} {% set current_date = 'now'|date('Y-m-d') %} {% if loan_end_date < current_date and loan.returnDate is null %} {% set overdue_count = overdue_count + 1 %} {% endif %}
这种方式要求日期格式统一为Y-m-d(年-月-日),才能保证字符串比较的正确性。
内容的提问来源于stack exchange,提问作者spip93
相关产品推荐
相关产品推荐

