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の案で進めてみたいと思います。
ありがとうございました。
Shopify アカデミーの学習パスと認定スキルバッジExpanding Your Shopify Business Internationallyを活用して、国際的にビジネ...
By Shopify Feb 7, 2025Shopify アカデミーの学習パスB2B on Shopify:立ち上げとカスタマイズで卸売販売に進出しましょう。これら3つの無料コースは、ShopifyストアでB2B機能...
By Shopify Jan 31, 2025サポートの選択肢が増えていく中、最適となる選択の判断が難しくなっているかと存じます。今回は問題の解決に最適となるサポートの選択方法を、紹介させて頂きます。 選択肢のご紹介...
By Mirai Oct 6, 2024