创建按日期时间戳排序的数组
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 日之前?
知道如何解决这个问题吗?
非常感谢任何帮助:)
三件事:
- 您打错字了,属性 被称为
data_01
,如此处 {% set data_01_date = product.data_01|date('U') %}
- 在创建数组的时候不要对数组进行排序,那是浪费性能
- 属性
data_01
是一个字符串,你不应该比较 sort
中的字符串
{% 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 %}
我正在尝试创建 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 日之前? 知道如何解决这个问题吗?
非常感谢任何帮助:)
三件事:
- 您打错字了,属性 被称为
data_01
,如此处{% set data_01_date = product.data_01|date('U') %}
- 在创建数组的时候不要对数组进行排序,那是浪费性能
- 属性
data_01
是一个字符串,你不应该比较sort
中的字符串
{% 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 %}