创建按日期时间戳排序的数组

Create arrays sorted on date timestamps

我正在尝试创建 3 个基于时间戳的产品数组。 我在 SaaS 平台上工作,所以我必须在前端创建这些数组,而在后端创建函数会更好,但这是不可能的。

想法是为彩票创建 3 个数组。所以 1 是当前的彩票,1 是即将开的彩票,1 是最近的彩票。

我遇到的问题是无法正确排序。因此,例如,输出显示 4 月 24 日在 3 月 24 日之前。

所以我有这个:

{% set curr_date = "now"| date('U') %}
{% set current_draws = [] %}
{% set upcoming_draws = [] %}
{% set recent_draws = [] %}
    
{% for product in products %}
    {% if product.data_01 %}
        {% set data_01_date = product.data_01 | date('U') %} //make timestamp for this product
    
        {% if data_01_date > curr_date %} //check if is upcoming or current
            {% if loop.first %} //if 1st in loop then it's current draw
                {% set current_draws = current_draws | merge([product]) %}
            {% else %}
                {% set upcoming_draws = upcoming_draws | merge([product]) | sort((a, b) => a.data_01_date <=> b.data_01_date ) | reverse %} 
                //reverse because lowest timestamp need to be showed first
            {% endif %}
        {% else %}
            {% set recent_draws = recent_draws | merge([ product ]) | sort((a, b) => a.data_01_date <=> b.data_01_date ) %}
        {% endif %}
    {% endif %}    
{% endfor %}

作为即将到来的绘制数组的输出,我得到以下内容:

{% for product in upcoming_draws %}
    {{ product.data_01 | date("U") }}
{% endfor %}

1648162800 // 25th March
1650751200 // 24th April
1648249200 // 26th March
1648335600 // 27th March

为什么在上面的例子中,4 月 24 日显示在 3 月 26 日之前? 知道如何解决这个问题吗?

非常感谢任何帮助:)

三件事:

  1. 您打错字了,属性 被称为 data_01,如此处 {% set data_01_date = product.data_01|date('U') %}
  2. 在创建数组的时候不要对数组进行排序,那是浪费性能
  3. 属性 data_01 是一个字符串,你不应该比较 sort
  4. 中的字符串
{% set curr_date = "now"| date('U') %}
{% set current_draws = [] %}
{% set upcoming_draws = [] %}
{% set recent_draws = [] %}

{% for product in products %}
    {% if product.data_01 %}
        {% set data_01_date = product.data_01 | date('U') %} //make timestamp for this product

        {% if data_01_date > curr_date %} //check if is upcoming or current
            {% if loop.first %} //if 1st in loop then it's current draw
                {% set current_draws = current_draws | merge([product]) %}
            {% else %}
                {% set upcoming_draws = upcoming_draws | merge([product]) %}
                //reverse because lowest timestamp need to be showed first
            {% endif %}
        {% else %}
            {% set recent_draws = recent_draws | merge([ product ]) %}
        {% endif %}
    {% endif %}
{% endfor %}

{% for product in upcoming_draws|sort((a, b) => a.data_01|date('U')  <=> b.data_01|date('U') | reverse  ) %}
    {{ product.data_01 | date("d-m-Y") }}
{% endfor %}

demo