FROM CACHE - jp_header
解決済

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

Naru_05
Shopify Partner
22 1 3

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
1475 522 652

成功

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

株式会社フルバランス(Shopify Experts)
Shopify専門のEC成長支援会社です。ストアの新規構築から運用や改善のサポートなどShopifyに関する幅広いサービスを行なっております。
ECの技術・実務・成長、お悩みのことがあれば、お気軽にご相談ください。
『すべてのブランドの特大成長エンジンを搭載する』 株式会社フルバランス

元の投稿で解決策を見る

2件の返信2

株式会社フルバランス
Shopify Partner
1475 522 652

成功

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

株式会社フルバランス(Shopify Experts)
Shopify専門のEC成長支援会社です。ストアの新規構築から運用や改善のサポートなどShopifyに関する幅広いサービスを行なっております。
ECの技術・実務・成長、お悩みのことがあれば、お気軽にご相談ください。
『すべてのブランドの特大成長エンジンを搭載する』 株式会社フルバランス
Naru_05
Shopify Partner
22 1 3

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

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