日付で判定する処理の実装方法について

このQ&Aのポイント
  • 日付で判定する処理を実装する方法について教えてください。
  • 掲示板のような処理で入力された日付と文章のデータをテキストファイルに保存し、それをHTMLで表示しています。
  • 入力された日付が1週間前の場合に文章を赤文字で表示する方法を教えてください。
回答を見る
  • ベストアンサー

日付で判定する処理

あまりよくわかっていないので恐縮ですが,掲示板のような処理で入力は日付と文章のみです. 入力の文字列の日付は,今日だと「2005/02/14」と入れ,文章は「こんにちは」としたとするとこの2つがテキストファイルに「,カンマ区切りで」書き込まれます.それをhtmlで表示させているようです. やりたい処理は1週間前の日付だったら文章の文字列を赤色で表示するということをしたいのです. 比較結果で赤文字列にする処理はわかったのですが判定の部分で悩んでおります. 判定する際,思いついたのが入力してある文字列がたとえば「2005/02/14」の形式なのでこの値と今日の日付とを比較して7日前だったら文章を赤文字にしたいのですが,普通はどのような比較をするのでしょうか? 私が考えたのは,ファイルに書き込まれている「2005/02/14」を読み込み「/」をなくして「20050214」にし数字形式にすることで,今日の日付も,「20050214」の形式として7日を引けば負の時は何もせず正の時は文章を赤文字で表示させればと考えたのですが,ファイルから読み込んだ「2005/02/14」から「/」を無くす方法や今日の日付を取得した結果は文字列の形式みたいなので計算にはつかえないようです. 実はもっと簡単な方法があるのではないかと悩んでいたりしています.どなたかご教授お願いいたします.

  • Perl
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • hikomin
  • ベストアンサー率63% (40/63)
回答No.1

2005/02/14から/を抜くのは、例えば正規表現なら、 my $date = '2005/02/14'; こんな風に変数に入っているとすれば、 $date =~ s{/}{}g; とかで引けます。 また、今日の日付は、例えば my ($y,$m,$d) = (localtime time)[5,4,3] my $today = sprintf "%04d%02%%02d", $y+1900, $m+1, $d; とすれば、yyyymmddの形式になります。(一行目でローカル時間の配列から年・月・日のデータだけ取り出して、2行目で整形) ただ、問題は月の変わり目なんかがあるので単純に7を引く程度では駄目な時があると言うことです。データにはエポック秒のまま記録しておき、表示の際に変換するとかが一般的と思いますが、整形された形からエポック秒を取り出す事も出来ます。これにはTime::Localモジュールを用い、 use Time::Local; my $date = '2005/02/14'; my ($y, $m, $d) = split m{/}, $date; my $epoc = timelocal(0, 0, 0, $d, $m-1, $y); # timelocalの引数は左からsec, min, hour, day, month, year とすればエポック秒を得られますので、7日であればこの数値から7*24*60*60を差し引きして比べると楽でしょう。

eijikun
質問者

お礼

ありがとうございました. 大変参考になりました.

関連するQ&A

  • Excel VBAで文字列の日付を判定

    Excel VBAで文字列の日付を判定 文字列の書式で”19900101”などとセルに入力されている場合に実際に存在する日付かを判定する方法はありますでしょうか? たとえば、19990132などと入力されている場合はエラーにしたいのです。ISDATEを使うのかともおもいましたがうまくいきません。 よろしくお願いします。

  • 日付を抜き出したい

    画像のようにA2~A3に文字列で日付が入力されています。 B2:C3に日付形式でA2に入力されている日付を”ー"で分けて西暦をつけて表示したいと考えています。 D2には開始日の日付の前日の日付を表示したいと考えています 年が変わった場合には翌年の日付を表示するにはどのような式を入力すればいいでしょうか。

  • エクセルで日付データの比較/判定でカウント

    エクセルで日付データの比較/判定でカウント A1に 2006/2/22 A2に 2006/2/23 ---------- という日付データが入っている。 またc1~c4に c1:2006/2/24+時間  (例2006/2/24 07:18) c2:2006/2/23+時間 c3:2006/2/23+時間 c4:2006/2/22+時間 ---------- という時刻まで含む日付データが入っている。 (処理)A1とC列のデータの日付けが同じものは1つc4だけなのでカウントし1件とその横の B列(B1)にカウント件数を表示したい。 B1に書く式はどのようにすればよいか。よろしくお願いします。

  • エクセル・文字列で保存されているデータを日付にしたい

    人からもらったデータです。 日付が文字列で保存されていて20060322という書き方で沢山入力されている列があります。 2006/03/22の表示に変更したいです。 列を指定して書式、セル、表示形式、日付、種類で変更してみようとしましたが、できませんでした。 そういえば、テキストデータを読み込む時、表示形式を指定し忘れて勝手に日付になってしまった文字列(数なのですが)を、後で文字列にするとおかしな数になってしまったことがありました。。。 保存されている表示形式を上手に変更する方法はありますでしょうか? 教えてください。

  • Excelで日付形式にしたくない時

    Excelの表示形式で1-2-3などと表示したい時 勝手に日付形式になってしまい困る事があります。 アポストロフィーをつけて文字列にするのも面倒な時があります、ここでは日付形式を使わない(入力どおりでいい)とき、皆さんはどうされていますか? 教えてください。

  • VBAのモーダル画面作成と日付判定について

    AccessのVBAで日付判定をするやり方とモーダル画面遷移のやり方を知りたいです。 テキストボックスの中に入っている文字列をyyyy/mm/dd形式に表示を変換したいです。 20210623とかは下記のコードで変換出来て、それは良いのですが適当に打った数字「325464」とか「2021/0918」を打つと「型が一致しません」、「オーバーフローしました。」と出てきてエラー文が出てしまいます。エラー文は出したくないのでif文のElseで日付以外の文字列だったら何も処理をせずそのままの表示((yyyy/mm/dd)という表示に変換はせずそのまま)という処理をしたいですがうまくいきません。IsDate関数もyyyymmdd形式は日付として認識してくれないので使えませんでした。 下記のコードは元になったコードです。 Private Sub 日付_AfterUpdate() 日付= CDate(Format(日付, "@@@@/@@/@@")) End Sub モーダル遷移に関しては、メインフォームの検索ボタンを押したら「検索」画面にモーダルで遷移するようにしたいです。 下記のコードでは一応モーダルで画面遷移するのですが、×ボタンで検索画面だけ閉じようとしたらメインフォームも一緒に閉じてしまいます。あと、なにもフォーカスを当ててない時にメインフォームでエンターキー押すと勝手に検索画面が出てくるという謎の誤作動起こしてます。 Private Sub 検索_Click() Dim ReserchForm As String ReserchForm = "検索" DoCmd.OpenForm ReserchForm, , , , , acDialog Me.Visible = False End Sub どちらもどうコードを直したらいいか分かりません。

  • Excelでの日付表示について

    Excelデータの一部について、文字列だった8ケタの数字があります。 これを、「区切り位置」を利用して”/”を入力し、日付として認識させました。 しかし、データの処理上で元の文字列に戻す必要があります。 色々検索をしてみたのですが、「セルの表示形式」で表示のみ変更する方法はあっても、 文字列に戻す方法を見つけられませんでした。 ご存知の方がおられましたら、教えて頂けませんか。 宜しくお願い申し上げます。 ≪例≫ 20130306(文字列) ⇒ 「区切り位置」を利用して、2013/03/06と変更(シリアル値) ⇒ 再度20130306(文字列)としたい(シリアル値ではダメ)

  • 「エクセル」で、ハイフンを数字として入力するには?

    「エクセル200」を使っています。 ハイフンを使った数字(例えば「1-3」)を入力すると、 自動的に「1月3日」となってしまい、困っています。 それまでは「セルの書式設定」の「表示形式」は 「標準」になっていたはずなのですが、 これもまた自動的に「日付」になっています。 「表示形式」を「文字列」にすると ハイフンはそのままに、「1-3」と入力出来るのですが、 なんとか「数字」としてハイフンを入力する方法は ないでしょうか? と、いうのも「エクセル」で作製したデータを、 「CSV(カンマ区切り)」形式で保存したいのです。 「エクセル」で文字列としてキチンとハイフンを 入力したつもりでも、 「CSV」にするとまた「日付」表示に 戻ってしまっているのです。 これは「CSV」に「文字列」を認識する機能が ないせいでしょうか? どなたかお教え願います。

  • エクセルで日付の判定をする方法

    数式をつくっていて、 日付の判定をしたいとおもっています。 H1に開始日 I1に終了日を入力しています。 この日付が判定の日付になります。 その下に表が作成してあり、 C44~500に開始日 D44~500に終了日 が入力されています。 この日付以外が関係しているところ ※開始日より前で終了日以前のところ。 開始日以降で終了日以降のところ この条件に一致するところは、I列(44~500)の色を緑色に塗りつぶす という条件式はどうなるのでしょうか。 具体的にいうと、12/1~12/5までの判定で 11/29以前~12/5までのデータ 12/1~12/6以降のデータ この2種類のデータのどちらか一方に該当をしていれば I列の数値を緑で塗りつぶす。 という作業を行いたいのです。 どなたがご教授くださいませ。

  • エクセルの日付の処理について

    エクセルの日付の処理方法を教えて下さい。 VLOOKUPを使って、大量の日付の付いたデータを処理したいのですが、たとえば 一方は  2012/7/1 もう一方は 201207 (月単位のデータしかない、「日」の情報が無い文字列データ) だとします。 このふたつを同じものとして検索したい場合、どのように 201207 を加工したらよいのでしょうか? 201207 という文字列データをシリアル値に変更すればいいのかなと考えたのですが シリアル値に変更する方法がよくわかりませんでした。 よろしくお願いします。

専門家に質問してみよう