Liquid、JavaScriptなどに関する質問
liquid内で現在時刻を取得し、メタフィールドから入力された値と比較させ表示、非表示の制御を実装中です。
現在日時はJsで下記のように取得してcapture変数に代入しています。
{% capture current_datetime %} <script> var currentDate = new Date(); var year = currentDate.getFullYear().toString(); var month = ('0' + (currentDate.getMonth() + 1)).slice(-2); var day = ('0' + currentDate.getDate()).slice(-2); var hour = ('0' + currentDate.getHours()).slice(-2); var minute = ('0' + currentDate.getMinutes()).slice(-2); var currentDateTimeString = year + '-' + month + '-' + day + ' ' + hour + ':' + minute; document.write(currentDateTimeString); </script> {% endcapture %}
メタフィールドの値は下記のように取得してります。
%- assign start_datetime = block.settings.start_date_time | date: "%Y-%m-%d %H:%M" -%}
変数current_datetimeと変数start_datetimeを{%- for block in section.blocks -%}内で比較しているのですが比較されず困っています。
変数の中身をデバックで確認したところ2023-05-20 18:55のように取得出来ています。
型の違いなどがあるのでしょうか。
お手数ですがご教示いただけましたらと思います。
解決済! ベストソリューションを見る。
成功
Naru_05 様
お世話になっております。
現在時刻とメタフィールド値の比較は、過去やったことがあるので、サンプルコードを計算します。
時刻の比較は、秒数に変換してからされるのが良いかと思います
■liquid
{%- assign now = "now" | date: "%Y-%m-%d" | date: "%s" -%}
{%- assign release = product.metafields.custom.release | date: "%Y-%m-%d" | date: "%s" -%}
{%- assign diff = now | minus: release -%}
{% comment %}604,800s(7日間){% endcomment %}
{%- if release and diff < 604800 -%}
<div>現在時刻とメタフィールド日時との差が7日未満のときはこのdivが表示されます。</div>
{%- endif -%}
■JS
if(`{{ product.metafields.custom.release | strip }}`) {
const release = new Date(new Date(`{{ product.metafields.custom.release | strip }}`).toLocaleString('ja-JP').slice(0, -3)).getTime();
const now = new Date(new Date().toLocaleString('ja-JP').slice(0,-3)).getTime();
const diff = (release - now) / 86400000; // 日差 (1日 = 86,400,000ms)
// 0 < diff <= 7 のとき、
if(diff > 0 && diff <= 7) {
// 実行したい処理
}
}
なにかヒントになれば幸いです。
私たちの励みにもなりますので、
お役に立てていればBest Answerボタンを押して頂ければ嬉しいです。
成功
Naru_05 様
お世話になっております。
現在時刻とメタフィールド値の比較は、過去やったことがあるので、サンプルコードを計算します。
時刻の比較は、秒数に変換してからされるのが良いかと思います
■liquid
{%- assign now = "now" | date: "%Y-%m-%d" | date: "%s" -%}
{%- assign release = product.metafields.custom.release | date: "%Y-%m-%d" | date: "%s" -%}
{%- assign diff = now | minus: release -%}
{% comment %}604,800s(7日間){% endcomment %}
{%- if release and diff < 604800 -%}
<div>現在時刻とメタフィールド日時との差が7日未満のときはこのdivが表示されます。</div>
{%- endif -%}
■JS
if(`{{ product.metafields.custom.release | strip }}`) {
const release = new Date(new Date(`{{ product.metafields.custom.release | strip }}`).toLocaleString('ja-JP').slice(0, -3)).getTime();
const now = new Date(new Date().toLocaleString('ja-JP').slice(0,-3)).getTime();
const diff = (release - now) / 86400000; // 日差 (1日 = 86,400,000ms)
// 0 < diff <= 7 のとき、
if(diff > 0 && diff <= 7) {
// 実行したい処理
}
}
なにかヒントになれば幸いです。
私たちの励みにもなりますので、
お役に立てていればBest Answerボタンを押して頂ければ嬉しいです。
ご返信ありがとうございます。
とても参考になりました。
メタフィールドと言いましたが、テーマエディターから入力した値の比較間違えでした。
失礼しました。
ただテーマエディターから入力した値にしてもご教示して頂いた内容で実現可能だと思いました。
動的な日時の取得が必須になりますのでJsの案で進めてみたいと思います。
ありがとうございました。
EコマースのEメールマーケティングは適切なタイミングで、適切にパーソナライズされたメッセージを顧客に届ける方法であり、厳しさを増すインターネットの規制を受ける必要もありません。こ...
By Nanami May 21, 2023自分が一から立ち上げた独自店舗型のネットショップでは、個人が運営するショップや聞いたこともないブランドに不安を感じる顧客はたくさんいます。そのため、信頼がおけるネットショップを作り...
By rinaflora Apr 19, 20232023年のマーケティング予算計画について取り上げた2H MediaとのAMAにご参加いただいた皆様ありがとうございました。たくさんのすばらしいご質問が寄せられました。それらの質問...
By Jacqui Apr 18, 2023