You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twig语法错误排查:计算同事总工龄时遇冒号异常

问题解决:Twig语法错误与工龄计算修正

语法错误原因

你遇到的Unexpected token ":"错误,根源是错误使用createAttribute()生成formatDiff的参数——formatDiff方法需要的是关联数组类型的配置,而非Attribute对象,这种类型不匹配导致Twig解析失败。

另外,代码还存在逻辑错误:formatDiff返回的是人类可读的字符串(比如"3 years"),不是秒数,直接累加会导致数值计算完全错误。

修正后的完整代码

{% if title %}
  <h3>{{ title }}</h3>
{% endif %}

{% set total_seconds = 0 %} {# 初始化总秒数变量 #}

{% for row in rows %}
  {%
    set row_classes = [
      default_row_class ? 'views-row',
    ]
  %}

  {# 获取入职日期字段值 #}
  {% set date_str = row.content['#view'].style_plugin.getField(row_index, 'field_start_date') %}

  {% if date_str %}
    {% set today = date('now') %}
    {% set date_object = date(date_str) %}

    {# 直接计算时间戳差值得到秒数,无需调用formatDiff #}
    {% set diff_seconds = today.getTimestamp() - date_object.getTimestamp() %}

    {% set total_seconds = total_seconds + diff_seconds %} {# 累加到总秒数 #}

    <div{{ row.attributes.addClass(row_classes) }}>
      {{- row.content -}}
    </div>
  {% else %}
    <div{{ row.attributes.addClass(row_classes) }}>
      {{- row.content -}}
    </div>
  {% endif %}

{% endfor %}

{% if total_seconds > 0 %}
  {% set total_years = (total_seconds / (365 * 24 * 60 * 60))|round(2) %} {# 秒数转年并保留两位小数 #}
  <p>全体员工累计总工龄:{{ total_years }} 年</p>
{% endif %}

关键修正点

  • 移除createAttribute()与formatDiff调用:直接通过时间戳相减得到秒数,这是计算时间差数值的正确方式,既避免了类型不匹配的语法错误,又保证计算逻辑准确。
  • 修正数值累加逻辑:现在累加的是真实的秒数差值,后续转成年份的计算才会有效。
  • 保留原有视图渲染逻辑:仅修改工龄计算部分,不影响原有员工列表的展示效果。

内容的提问来源于stack exchange,提问作者David Salerno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 10:35:18