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

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

ただいまの
回答率

88.62%

JSON 日付の値を一括変換処理し現在日時と比較したい

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,213

chibiyuko_0124

score 18

いつもお世話になっております。
JSONの値が世界標準時間なので日本時間に変換後、現在日時と比較処理したいと思っています。
日本時間への変換には成功はしたのですが、同じように処理したい値が複数あります。
まとめてひとつのソースで処理にしたいのですが、どのようにすれば良いでしょうか。
また、それぞれ現在日時と比較したいのでそれぞれキーを保持したいです。

json

[
{
"date1":"2005-09-26T15:00:00.000Z",
"date2":"2005-09-26T15:00:00.000Z",
"date3":"2018-08-19T15:00:00.000Z"
},
{
"date1":"2005-10-26T15:00:00.000Z",
"date2":"2005-10-26T15:00:00.000Z",
"date3":"2018-12-19T15:00:00.000Z"
}
]

js

var arr = new Date(date1);
var year = arr.getFullYear();
var month = arr.getMonth() + 1;
var day = arr.getDate();
var h = arr.getHours();
var i = arr.getMinutes();
var s =arr.getSeconds();    
var date1_data = year + '年' + month + '月' + day + '日 + h + ‘:’+ i + ‘:’+ s;

上記処理をdate2、date3も全く同じようにしたいです。

よろしくお願いいたします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • madoka9393

    2018/11/15 15:11

    JavaではなくJavaScriptの質問ですかね?

    キャンセル

  • chibiyuko_0124

    2018/11/15 15:56

    すみません!JavaScriptを選択したはずが間違っておりました。直しました。

    キャンセル

回答 3

+1

function isNew(rawDate) {
    var now = new Date();
    var date = new Date(rawDate);
    return now > date;
}
console.log(isNew('2019-01-01'));
console.log(isNew('2018-11-15T12:00:00.000z'));
console.log(isNew('2018-11-14T12:00:00.000z'));


false
false
true

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

どのようにすれば良いでしょうか。

関数にしましょう。
質問文にあった日時から日本語日時のロジックを流用して関数化してみました。

var toJPN = function (iso) {
  var arr = new Date(iso);
  var year = arr.getFullYear();
  var month = arr.getMonth() + 1;
  var day = arr.getDate();
  var h = arr.getHours();
  var i = arr.getMinutes();
  var s =arr.getSeconds();    
  return year + '年' + month + '月' + day + '日 + h + ‘:’+ i + ‘:’+ s;
}

現在日時と比較したい

これも必要なタイミングで比較出来るよう、関数化しておきましょう。

var isFuture = function (iso) {
  return (new Date()) < (new Date(iso));
}

それぞれ現在日時と比較したいのでそれぞれキーを保持したいです。

関数があれば何時でも日本語時刻には変換出来ます。
ですので、本当に使う瞬間までは元の値と関数の2つを保持するようにしてください。
そうすればわざわざ「キー」等という新しいデータを作る必要はなくなります。

ソースコードは小説で、変数は登場人物です。
貴方は1文節の度に登場人物が増える小説を読みたいですか?
それと同じで、ソースコードは変数が多すぎると登場人物過多の小説と同じで読みづらくなります。
無理して変数を作らないようにする必要はありませんが、必要最小限の変数だけ用意することだけ心がけましょう。

JSONの値が世界標準時間なので日本時間に変換後、現在日時と比較処理したいと思っています。

ここの考え方ですが、なぜ貴方は日本時刻に変換しなければならないのでしょうか?
突き詰めれば、「非エンジニアが出力結果の文字列を見た時に読みづらいと感じるから」になるでしょう。

実際デベロッパーツール等で開いて見た時に日本語の時刻文字列だと嬉しいのは分かりますが、
ISOの時刻はそのまんまnew Date(time)として投げ込んで上手いこと解釈される優秀なフォーマットなんです。
私の経験則でこのフォーマットを出来るだけ維持しておくと何かと都合が良いです。

画面に出力するタイミングで先程の関数toJPNと一緒に使うようにしましょう。

// 使用例
$('.hogehoge').text(toJPN(date1));

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

全ての値に対して日付変換をかけるところまで。

var json = [
{
"date1":"2005-09-26T15:00:00.000Z",
"date2":"2005-09-26T15:00:00.000Z",
"date3":"2018-08-19T15:00:00.000Z"
},
{
"date1":"2005-10-26T15:00:00.000Z",
"date2":"2005-10-26T15:00:00.000Z",
"date3":"2018-12-19T15:00:00.000Z"
}
];

json.forEach(function(element){
    for(key in element){
      check(key,element[key]);
    }
});

function check(dateKey,date){
    var arr = new Date(date);
    var year = arr.getFullYear();
    var month = arr.getMonth() + 1;
    var day = arr.getDate();
    var h = arr.getHours();
    var i = arr.getMinutes();
    var s =arr.getSeconds();    
    var date1_data = year + '年' + month + '月' + day + '日 + h + ‘:’+ i + ‘:’+ s';
  //日付比較用の処理にdateKeyとdate1_dataを渡すなりなんなり
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 88.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る