FROM CACHE - jp_header
このコミュニティはピアツーピアサポートに移行しました。Shopify サポートは今後、このコミュニティへのサービスを提供いたしません。これからもぜひ、他のマーチャントやパートナーとつながり、サポートし合い、経験を共有してください。 当社の行動規範に違反する行動や削除を希望するコンテンツがありましたら、引き続きご報告ください

liquid内での現在日時の取得について

解決済

liquid内での現在日時の取得について

Naru_05
Shopify Partner
69 12 14

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のように取得出来ています。
型の違いなどがあるのでしょうか。
お手数ですがご教示いただけましたらと思います。

1 件の受理された解決策

株式会社フルバランス
Shopify Partner
1699 597 783

成功

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ボタンを押して頂ければ嬉しいです。

元の投稿で解決策を見る

2件の返信2

株式会社フルバランス
Shopify Partner
1699 597 783

成功

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
Shopify Partner
69 12 14

ご返信ありがとうございます。
とても参考になりました。

メタフィールドと言いましたが、テーマエディターから入力した値の比較間違えでした。
失礼しました。
ただテーマエディターから入力した値にしてもご教示して頂いた内容で実現可能だと思いました。
動的な日時の取得が必須になりますのでJsの案で進めてみたいと思います。
ありがとうございました。