質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2671閲覧

iOS上でjavascriptが一部だけNaNの値を返します

yunyun_jp

総合スコア1

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/05/04 10:33

編集2021/05/04 10:34

解決したいこと

PCのブラウザ(Chrome、Safari)では正しく残り日数が表示されるのですが、iPhone12Pro上(Chrome、Safari、Brave)のブラウザではトップページの表示はされるのですが、詳細画面で正しく表示されません。(下記画像参照)
Android端末等、他の環境では確認しておりません。

何が原因でしょうか?
Dateメソッドはやはり使わないほうが良いのでしょうか?
解決方法がありましたらご教示くださいください!

発生している問題・エラー

![イメージ説明
イメージ説明

該当するソースコード

正しく表示される

javascript

1window.addEventListener('load', () => { 2 const arrjsonInput = document.getElementById("arr_json"); 3 for (let i = 0; i < arrjsonInput.value ; i++) { 4 const expirationInput = document.getElementById("expiration-date"+i); 5 const today = new Date(); 6 const expirationDate = new Date(expirationInput.innerHTML); 7 const daysLeft = document.getElementById("days-left"+i); 8 daysLeft.innerHTML = (Math.round( (expirationDate.getTime() - today.getTime()) / ( 1000 * 60 * 60 * 24 ))); 9 if (daysLeft.innerHTML <= 0) { 10 const deadLine = document.getElementById("dead-line"+i); 11 deadLine.setAttribute("style", "color:#7945F5;text-decoration:underline #7945F5;"); 12 daysLeft.setAttribute("style", "color:#7945F5;text-decoration:underline #7945F5;"); 13 }; 14 }; 15});

NaNと表示される↓

javascript

1window.addEventListener('load', () => { 2 const expirationInput = document.getElementById("expiration_date"); 3 const today = new Date(); 4 const expirationDate = new Date(expirationInput.innerHTML); 5 const daysLeft = document.getElementById("days_left"); 6 daysLeft.innerHTML = (Math.ceil( (expirationDate.getTime() - today.getTime()) / ( 1000 * 60 * 60 * 24 ))); 7 if (daysLeft.innerHTML <= 0) { 8 const deadLine = document.getElementById("dead_line"); 9 deadLine.setAttribute("style", "color:#7945F5;text-decoration:underline #7945F5;"); 10 daysLeft.setAttribute("style", "color:#7945F5;text-decoration:underline #7945F5;"); 11 }; 12});

show.html.erb

Ruby

1 2 <% if user_signed_in? && current_user.id == @item.user_id %> 3 <div class="item-manage"> 4 <%= link_to "編集", edit_item_path(@item), class: :item__btn %> 5 <%= link_to "削除", item_path(@item), method: :delete, class: :item__btn %> 6 </div> 7 <% end %> 8 <div class="item_block"> 9 <div class="item_card"> 10 <div class="image-content"> 11 <%= link_to image_tag(@item.image.variant(resize: '200x200'), class: :card__img ) %> 12 </div> 13 14 <div class="daysleft-detail"> 15 <span id="dead_line">残り<span id="days_left"></span></span> 16 </div> 17 18 <div class="item-detail"> 19 <p class="detail__title">名前</p> 20 <p class="detail__message"> 21 <%= @item.name %> 22 </p> 23 </div> 24 <div class="item-detail"> 25 <p class="detail__title">数量</p> 26 <p class="detail__message"> 27 <%= @item.quantity %> 28 </p> 29 </div> 30 <div class="item-detail"> 31 <p class="detail__title">購入日</p> 32 <p id="purchase_date"> 33 <%= @item.purchase_date %> 34 </p> 35 </div> 36 <div class="item-detail"> 37 <p class="detail__title">賞味期限</p> 38 <p id="expiration_date"> 39 <%= @item.expiration_date %> 40 </p> 41 </div> 42 43 <% if @item.memo.present? %> 44 <div class="item-detail"> 45 <p class="detail__title">メモ</p> 46 <p class="detail__message"> 47 <%= @item.memo %> 48 </p> 49 </div> 50 <% end %> 51 <div class="nickname-content"> 52 <%= "by #{@item.user.nickname}" %> 53 </div> 54

自分で試したこと

問題は-かなと思いましたが、replaceの使い方もよくわかりませんでした。

var dt = new Date(at.replace(/([+|\-])([0-9]{2})([0-9]{2})$/,"$1$2:$3"));
now=new Date(d.replace(/-/g,"/"));

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

おそらくインデント等が原因でした
.trim()で解決しました。
スマホの方でも表示できました。

投稿2021/05/05 07:23

yunyun_jp

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

日付や計算などは結構ブラウザ依存がある印象です(あくまで私的印象)
バリデーションなども含めて挙動を統一したい場合は、サーバーサイドから得るようにした方が確実かもしれません。

投稿2021/05/04 10:40

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yunyun_jp

2021/05/05 01:49

回答ありがとうございます やはりそうなのですね、、、 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問