いつもお世話になっていますm(__)m
PHP3で正確に一ヶ月前の日付を取得したいのですが
みなさんどうされているのでしょうか?

改めてみるとそんな関数すら自前なんでしょうか(y.y;
よろしくお願いします。

A 回答 (2件)

汎用的に説明すると


 ・月 ← 月-1
 ・1月の場合は、月 ← 月+11(12ということですね)、年 ← 年-1
 ・上記で定義した年月日が存在しない場合、年月を元に戻して 日 ← 1
終了。

1ヶ月前をJRの指定席予約では「前月の同日が存在しない場合、翌月の1日」(つまり3月31日の1ヶ月前は、3月1日)なので、上記にしています。
もし、「前月の同日が存在しない場合、前月の最終日」とするなら、3つ目の手順を「年月日が存在しない場合、日 ← 日-1」をループさせてください。

以上。

この回答への補足

1ヶ月前をJRの指定席予約では「前月の同日が存在しない場合、翌月の1日」(つまり3月31日の1ヶ月前は、3月1日)なので、上記にしています。

というのはプログラム的には楽でしょうけど^^;
「前月の同日が存在しない場合、前月の最終日」
が一般的だと思うのでループさせて作成します

ありがとうございました

補足日時:2001/02/22 12:46
    • good
    • 0

一ヶ月ってのをどうやって定義したら良いんでしょうか?


単純に前月ならば月だけをデクリメントして、0以下になったら年をデクリメントって感じだと思いますが。
日までやるとかなり面倒でしょうけど・・・

この回答への補足

投稿してから shigatsuさんが云うようなので
いいか、なんて思っちゃいました

2000/3/31の1ヶ月前は・・・2000/2/29?
確かに面倒ですよね^^;

補足日時:2001/02/22 08:58
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qvista では phpeclipse phpeditor 共に対応していませんが、みなさんどうしてますか?

タイトルのとおりなのですが、
windows vista では phpeclipse phpeditor 共に対応していませんが、みなさんどうしてますか?
現在はとりあえず、emeditorでしのいでます。

Aベストアンサー

>windows vista では phpeclipse phpeditor 共に対応していませんが

あ、そうなんですか。
まったく知らずに、VistaでそのままPHPEclipseとPHP Editorを使ってました(笑)。で、どのへんが対応してないんでしょうか。とりあえず、今のところ動作が変だったところは特にないんですが・・・。

Qシャッフルしたデータを正確に引き継ぎたい

試験問題のプログラムを作っています。
MySQLに格納されている問題文と選択肢をシャッフルして表示し、ユーザーからは見えない選択肢aを選ぶと正解で得点が1カウントされるものです。
問題用紙のページではきちんと問題と選択肢が表示されるのですが、セッションを使い採点のページに進むとMySQLに入っている問題文と選択肢が大量に表示されてしまいました。
ユーザーが採点のページに進むとどの問題を間違えたのか確認できるように問題用紙のページと同じように表示させたいのですが、これはどのようにコードを書けばよいのでしょうか?
どうぞよろしくお願い致します。

//問題用紙のページ
<?php
session_start();
?>
<form method="post" action="grading.php">
<?php
$arr = array();
while ($row = mysqli_fetch_array($result)){
$arr[] = $row;
}
shuffle($arr);
$cnt = 0;
foreach($arr as $row){
if($cnt >= 3){break;}
print $row['question'];
print "<BR>";
$choices = array();
$choices['a'] = "<INPUT type=radio name=radi_".$cnt." value=a>".$row['choices_a']."<BR>";
$choices['b'] = "<INPUT type=radio name=radi_".$cnt." value=b>".$row['choices_b']."<BR>";
shuffle($choices);
foreach($choices as $val){
print $val;
}
session_register('sesdata_q');
session_register('sesdata_a');
session_register('sesdata_b');
$_SESSION['sesdata_q'][] = $row['question'];
$_SESSION['sesdata_a'][] = $row['choices_a'];
$_SESSION['sesdata_b'][] = $row['choices_b'];
print "<BR>";
$cnt++;
}
?>
<INPUT type="submit" value=" 採点 " name="grading">

//採点のページ
<?php
session_start();
$score = 0;
$answer = $_POST['radi_0'];
if($answer == 'a'){
$score++;
}
$answer = $_POST['radi_1'];
if($answer == 'a'){
$score++;
}print "3問中" . $score . "問正解";
print "<br>";
foreach($_SESSION['sesdata_q'] as $val){
print $val."<BR><BR>";
}
foreach($_SESSION['sesdata_a'] as $val){
print $val."<BR><BR>";
}
foreach($_SESSION['sesdata_b'] as $val){
print $val."<BR><BR>";
}
?>

試験問題のプログラムを作っています。
MySQLに格納されている問題文と選択肢をシャッフルして表示し、ユーザーからは見えない選択肢aを選ぶと正解で得点が1カウントされるものです。
問題用紙のページではきちんと問題と選択肢が表示されるのですが、セッションを使い採点のページに進むとMySQLに入っている問題文と選択肢が大量に表示されてしまいました。
ユーザーが採点のページに進むとどの問題を間違えたのか確認できるように問題用紙のページと同じように表示させたいのですが、これはどのようにコードを...続きを読む

Aベストアンサー

とりあえず書いてみたので参考までに

//situmon.php

<?PHP
session_start();
//mysqlへの接続
$sql="SELECT * FROM test ORDER BY RAND() LIMIT 3";
$res=mysql_query($sql);
while($row=mysql_fetch_array($res,MYSQL_ASSOC)){
$a=&$arr[];
$a["question"]=$row["question"];
$temp[0]["key"]="a";
$temp[0]["value"]=$row["choices_a"];
$temp[1]["key"]="b";
$temp[1]["value"]=$row["choices_b"];
shuffle($temp);
$a["answer"]=$temp;
unset($temp,$a);
}
$_SESSION["arr"]=$arr;//シャッフルした状態でセッションに流す
?>
<form action="kaito.php">
<?PHP
foreach($arr as $key=>$a){
print "質問".($key+1).")".$a["question"]."<br>\n";
foreach($a["answer"] as $answer){
print "<input type=\"radio\" name=\"q[".$key."]\" value=\"".$answer["key"]."\">".$answer["value"]."<br>\n";
}
}
?>
<input type="submit" value="回答する">
</form>

//kaito.php
<?PHP
session_start();
$arr=$_SESSION["arr"];
$count=0;
foreach($arr as $key=>$a){
print "質問".($key+1).")".$a["question"]."<br>\n";
foreach($a["answer"] as $answer){
if($answer["key"]==="a"){
print "<span style=\"color:blue\">[正解]";
}
print $answer["value"];
if($answer["key"]===$_REQUEST["q"][$key]){
print " ・・・あなたの選択";
}
print "</span><br>\n";
}
if($_REQUEST["q"][$key]==="a"){
$count++;
}
}
print "<span style=\"color:red\">".$count."問正解!!\n<hr>\n";
?>
[ <a href="situmon.php">質問へ</a> ]

とりあえず書いてみたので参考までに

//situmon.php

<?PHP
session_start();
//mysqlへの接続
$sql="SELECT * FROM test ORDER BY RAND() LIMIT 3";
$res=mysql_query($sql);
while($row=mysql_fetch_array($res,MYSQL_ASSOC)){
$a=&$arr[];
$a["question"]=$row["question"];
$temp[0]["key"]="a";
$temp[0]["value"]=$row["choices_a"];
$temp[1]["key"]="b";
$temp[1]["value"]=$row["choices_b"];
shuffle($temp);
$a["answer"]=$temp;
unset($temp,$a);
}
$_SESSION["...続きを読む

Q日付 yymmdd

今日の日付をたとえば2007年12月13日のときは071213と表記させたいと思い、

$today = mktime (0,0,0,date("m") ,date("d")+1,date("Y"));
$TODAY = date("ymd",today);

としたのですが上手くいきません。
出力は700101となってしまいます。
どうすればよいでしょうか?

Aベストアンサー

$today = mktime (0,0,0,date("m") ,date("d")+1,date("Y"));
$TODAY = date("ymd",$today);
echo $TODAY; //071214

当方だと071214ですね。
一日後を取得するのコードなので14になると思うというのは無粋ですかね^^;

>$TODAY = date("ymd",today);
todayが定数になっているのですがそれが原因でしょうか。
$TODAY = date("ymd",$today);
ともあれ、原因は別のところにあるのではないかと思います。

Q日曜日の日付

お世話になります。PHPで質問です。
似た様な質問はあったのですが、出来なかったので質問させて頂きます。
アクセスされた時に、その週の日曜日の日付を取得したいです。

アクセス日が2008年4月3日(木)の場合、2008年3月30日(日)

宜しくお願いします。

Aベストアンサー

こんな感じで
<?
function getNitiyou($str){
$d=strtotime($str);//(1)
$w=date("w",$d);//(2)
$nitiyou=date("Y年m月d日(日)",$d - $w *60*60*24);//(3)
return $nitiyou;
}
$str="2008/4/3"
print getNitiyou($str);
?>

(1)文字としての日付を日時型になおし
(2)その日の曜日を$wで抜き出して
(3)その日から曜日×一日の秒数引くと、日曜日になるので、それを
date()で整形します。

Qお世話になります。

こんばんわっ!

指定した時間に指定したログをDBへインサートしたいと思っていました。

23:59になったらインサートとしましたけどだめですね(笑)


その時間にアクセスがあるとif構文も動いてくれるんですけどやはりクロンを使わなければダメですか。

Aベストアンサー

ヘッダにmeta refreshなどを記述しておいて定期的にリロードさせるのはどうでしょう。
定期的にサーバーへアクセスするため、ログに残る、サーバーに負荷がかかる、そのページは常に開いていないとダメ、などの問題はありますが実現は可能です。

それと、タイトルはもっとわかりやすい内容にしないとみんなにみてもらえないかもです。


このカテゴリの人気Q&Aランキング

おすすめ情報