こんにちは。下のような実行ソースプログラムを作ったのですが、

<?php
  echo("2005/1/29の1ヶ月後:". date( "Ymd",
mktime(0,0,0,1+1,29,2005) )."<BR>" );
  echo("2005/1/30の1ヶ月後:". date( "Ymd",
mktime(0,0,0,1+1,30,2005) )."<BR>" );
  echo("2005/1/31の1ヶ月後:". date( "Ymd",
mktime(0,0,0,1+1,31,2005) )."<BR>" );
?>

実行結果において
> 2004/1/30の1ヶ月後:20040301
> 2005/1/29の1ヶ月後:20050301
> 2005/1/30の1ヶ月後:20050302
のような不具合が出てしまいます。どう直してよいものか行き詰ってしまっているので、どなたかアドバイスを宜しくお願いします。

基本形はfunction_exという関数を作って↓
function mktime_ex(...) {

  例外処理
  必要に応じて return

 // その他は、標準機能に任せる
 return mktime( sec, min, hour, ... );
}
という形にしたいと思っています。
宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

#1補足>ようは、月末の日の数を超えた場合は、月末の日の数にするということみたいなので、以下の様にすればいいかと思います。


※mktimeは、本来引数を省略できるので、本当は、引数を省略した場合の処理をしないといけないですが、サンプルでは、そのような処理はしていません。
function mktime_ex($hour,$minute,$second,$month,$day,$year){
$monthDay = array(31,28,31,30,31,30,31,31,30,31,30,31);
if(($year % 400 == 0) || (($year % 4 == 0) && ($year % 100 != 0))){
$monthDay[1]=29; //閏年
}
if($day>$monthDay[$month-1]){//指定された月の日の数より大きい時
$day=$monthDay[$month-1];//その月末の日の数にする
}
return mktime( $hour,$minute,$second,$month,$day,$year);
}
    • good
    • 0
この回答へのお礼

なるほど、大変解りやすいプログラムです。
その方法を使わせていただきますね。
また、逆に2004/3/31の一ヶ月前を2004/2/29としたいときも
その方法と同じようにやればいいのですよね。
ちょっと試してみます。
ありがとうございました。

お礼日時:2005/04/19 09:05

>2005/1/29の1ヶ月後:20050301


>2005/1/30の1ヶ月後:20050302
>2005/1/31の1ヶ月後:20050303
ウチで実行したところ上記のようになりました。
実行結果としては正しい(不具合ではない)
2005/1/29:一ヶ月後
2005/1+1/29→2005/02/29
2005年の2月28日までなので、翌日になり
(> 2004/1/30の1ヶ月後:20040301、の場合は、2004年が閏年のため2/29までだから2/30→3/1)
2005/02/29→2005/03/01
かと思いますが、
どのようになれるのが理想の結果なのでしょうか?

この回答への補足

>2005/1+1/29→2005/02/29
>2005年の2月28日までなので、翌日になり
>(> 2004/1/30の1ヶ月後:20040301、の場合は、2004年が閏年のため2/29までだから2/30→3/1)
>2005/02/29→2005/03/01

計算としてはそれが正しいのですが、
2005/1/29の一ヶ月後を2005/2/28としたいのです。
実行結果が↓
2004/1/30の1ヶ月後:20040229
2005/1/29の1ヶ月後:20050228
2005/1/30の1ヶ月後:20050228
2005/1/31の1ヶ月後:20050228
のようになってほしいのですが…
引き続きアドバイスを宜しくお願いします。

補足日時:2005/04/19 04:27
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

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

Q「情報」の教員の需要について

情報の教員の募集状況を知っておられれば教えてください。
よろしくお願いします。

Aベストアンサー

現在、「情報」の免許1つしか持っていない教員の募集は、ほとんどないという感じです。

現行の「情報」の授業時間数は1クラス週1回というような状況ですので、高校で他の科目の授業を行っている教員に、通信制大学などで、「情報」の免許も取得させて、今まで教えていた科目と「情報」の時間を掛け持ちさせてまかなう・・・というのが一般的です。

通信制大学などで、「情報」以外の科目の免許も取得されることをオススメします。

Qフォームのtextareaにnl2brを使用すると、入力内容の改行部分に
が表示されてしまう。

現在、フォームを作成しています。
セッションを利用してフォームの次のファイルにデータを受け渡しています。

問題は、フォームのtextareaにnl2brを使用すると、出力画面のtextareaに入力された内容において改行がある部分に<br />タグが表示されてしまうことです。

フォームの流れ:
start.phpにおいてフォームに入力及び、入力エラーがある場合、入力内容訂正の表示。
mail.phpにおいて入力内容の確認及びデータ送信。

start.phpのtextarea以下:
<textarea name="test"><?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?></textarea>
解説:start.phpでは、フォームの入力項目のいずれかに入力エラーがあるとその項目の入力内容の訂正を促し、入力されたデータをもう一度表示します。(<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示します。)

mail.phpにおいてstart.phpのtextareaに入力されたデータを表示する部分は以下:
<?php echo nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8')) ?>

start.phpにおいて入力項目のいずれかにエラーがあり、<textarea name="test">に入力されたデータをもう一度<textarea name="test">に表示した場合も、また、mail.phpにおいてstart.phpのtextareaに入力されたデータを表示した場合も、<textarea name="test">内の文字列に改行があるとその部分に<br />が表示されてしまいます。

入力例:
あいうえおかきくけこ
たちつてと

表示例(nl2br使用):
あいうえおかきくけこ<br />
たちつてと
解説:nl2brを使用した場合、<br />は挿入されてしまいますが、予定の場所で改行されて表示されます。

試しにnl2br()をコードから削除すると、以下のような表示となります。
表示例(nl2br未使用):
あいうえおかきくけこたちつてと
解説:nl2brを使用しない場合、改行されません。

どのようにすれば、textareaに入力された内容の改行部分が改行だけされ<br />が表示されないようにできるでしょうか?

よろしくお願いします。

現在、フォームを作成しています。
セッションを利用してフォームの次のファイルにデータを受け渡しています。

問題は、フォームのtextareaにnl2brを使用すると、出力画面のtextareaに入力された内容において改行がある部分に<br />タグが表示されてしまうことです。

フォームの流れ:
start.phpにおいてフォームに入力及び、入力エラーがある場合、入力内容訂正の表示。
mail.phpにおいて入力内容の確認及びデータ送信。

start.phpのtextarea以下:
<textarea name="test"><?php echo nl2br(htmlspe...続きを読む

Aベストアンサー

nl2brを使用して、<br />を \n とかに戻してやればいいと思います。
$data = nl2br(htmlspecialchars($input_data['test'], ENT_QUOTES, 'UTF-8'));
echo ereg_replace ("<br />","\n",$data);
とかで。

Q情報の教員採用数の動向について

高校で情報の教員というのですが、今後採用数はどうなりそうでしょうか?
個人的には新しい教科なので定年退職される先生がいませんし、採用するにしたがってどんどん募集がなくなっていくように推測しているのですが。

Aベストアンサー

私も情報の教員免許を持っていて、受験しようとしましたが、教育大学のゼミの教授に「情報」はこれからどんどん少なくなるから、他教科で受けた方がいいと言われました。
今は、パソコンに詳しい教員も多いし、比較的少ない単位数で取れるので、他教科の先生に取ってもらったり、臨時免許でやっている学校が多いと思います。
うちの学校も現在、私が化学と情報をかけもちして教えています。
逆にいえば、他教科の免許と情報を持っていれば、採用試験には少し有利かもしれないですね。

Qprint "\n";の0.pingの0てなんでしょうか?

以下のprint "<img src=\"0.jpg\/>\n";の0てなんでしょうか?
 ファイル名でしょうか?以下プログラムです。
  よろしくお願いいたします。(馬鹿な質問ばかりですみません_ _)
<!DOCTYPE html>
<html>
<head>
<title>P121 指定した多数の画像を出力する 5-4</title>
</head>
<body>

<?php

$num = 10;

for($i=0; $i<$num; $i++){
print "<img src=\"0.jpg\/>\n";
}

?>

</body>
</html>

Aベストアンサー

>print "<img src=\"0.jpg\/>\n";
この行は間違っていますが、何かの参考書から引用したものですか?
元の物とよく見比べてみてください。
これでは、正常なHTML文は作成出来ません。

問題の意味が不明ですが、これをみると「0.jpg」と言う画像ファイルで、仰るとおり「ファイル名」です。
しかし、上記のように間違っているものなので、本来「ファイル名」なのか疑問です。

Q教育委員会のホームページで臨時的任用の教員が募集されていて志望しました

教育委員会のホームページで臨時的任用の教員が募集されていて志望しました。
《養護教諭 中学校》です。
電話で、今日募集かけたばかりだからもう少し募集して選考しますとのことでした。
勤務は8月半ばかららしいのですが、決定はいつぐらいに連絡くるのでしょうか?

Aベストアンサー

こんにちは。
何度か臨採の経験があります。

年度当初からの採用ですと、ひどい時には2日前に連絡が来ることもありました。
でも8月半ばからと予定が決まっているのでしたら、産休補助だと思いますので、そんなに差し迫っての連絡にはならないと思います。募集かけたばかりというのですから、約1ヶ月後、おそらく7月末から8月頭の頃に連絡がくるのではないでしょうか。

Qdateやmktimeやgetdateなどでエラー

<?php
print "a";
echo rand(1,10);
?>
とかはちゃんと表示されるのですが、
dateやmktimeやgetdateなどを使うとエラーが出てしまいます。
サンプルコードは参考書通りなので間違っていないと思うのですが、
サーバー側の問題なのでしょうか。サーバーはapache2.4でローカルで使っています。

<?php
echo date('c', mktime(1, 2, 3, 4, 5, 2006));
?>

Warning: mktime() [function.mktime]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for '9.0/no DST' instead in C:\apache\htdocs\a.php on line 4

Warning: date() [function.date]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for '9.0/no DST' instead in C:\apache\htdocs\a.php on line 4
2006-04-05T01:02:03+09:00


<?php
$today = getdate();
print_r($today);
?>

Warning: getdate() [function.getdate]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Asia/Tokyo' for '9.0/no DST' instead in C:\apache\htdocs\a.php on line 2
Array ( [seconds] => 6 [minutes] => 44 [hours] => 23 [mday] => 11 [wday] => 6 [mon] => 2 [year] => 2012 [yday] => 41 [weekday] => Saturday [month] => February [0] => 1328971446 )

<?php
print "a";
echo rand(1,10);
?>
とかはちゃんと表示されるのですが、
dateやmktimeやgetdateなどを使うとエラーが出てしまいます。
サンプルコードは参考書通りなので間違っていないと思うのですが、
サーバー側の問題なのでしょうか。サーバーはapache2.4でローカルで使っています。

<?php
echo date('c', mktime(1, 2, 3, 4, 5, 2006));
?>

Warning: mktime() [function.mktime]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or...続きを読む

Aベストアンサー

正確にはエラーじゃなく「警告(warning)」です。
で、メッセージは読みました?
「It is not safe to rely on the system's timezone settings」で検索したら、原因と対処がいくらでも見つかりますよ。

最近追加されたようなので、古い参考書には載っていないのかもしれません。

Q「情報教育担当過配教員」について

「情報教育担当過配教員」とは、コンピュータを使った学習の支援のために「定数外に配した」教員で、大阪府の小学校ではこのような教員が子どもたちにパソコンを教えているようです。
この「情報教育担当過配教員」について、どなたかもっと詳しく教えていただけますか。
どうしたらなれるのかも教えていただければと思います。

Aベストアンサー

情報教育に限らず、「過配教員」というのは、今現在教員として勤務している人を、その学校の定数を超えて余分に配置するということで、定数外だからといって別枠を設けて民間人などを採用して配置するものではありません。
「情報教育担当」などコンピュータを扱う過配は、多くの場合理数系の科目に多く設定されているようです。
しかし、本当は科目を教えるはずの教員がそういった別の仕事をするために、科目を教える人員が不足する場合があって、その時は講師時間を教委に申請して人員を増やしたりします。
なので、「情報教育担当の教員」になる、というのはちょっと難しいと思いますよ。講師登録をしておいて、そういった過配のある学校で仕事をさせてもらえるようにするとかいう方法が、一番現実的だと思います。

Qecho $a++とecho ++$a,の違いは?

<?php
$a = 10;

echo $a++,PHP_EOL;

------------------------------

 <?php
$a = 10;

echo ++$a, PHP_EOL;

-------------------------------
 以上の計算結果は同じですか?
  もし同じでしたら、また悩みが増えます。
 よろしくお願いします。

Aベストアンサー

計算結果は、どちらも echo の次行では $a の中身は 11 です。

しかし、echo で出力される結果は前者は 10 、後者は 11 になります。
前者は $s の中身を出力した後に足し算が行われます。
後者は足し算を行った後に $a の中身を出力します。

<?php
$a = 10;
echo $a++,PHP_EOL;
echo $a,PHP_EOL;

$a = 10;
echo ++$a,PHP_EOL;
echo $a,PHP_EOL;
?>

で実験してみれば判るでしょう。

Q新教科「情報」教員免許について

国語の中学・高校教員免許を持ち、中学校の教員を目指している者です。
大学を卒業してからの半年間、情報教育指導補助員として中学校に勤務し、
現在はボランティアで通っています。

情報教育に非常に興味があるのですが、「情報」の教員免許をとることは
中学校の教壇に立つことに有効に働くでしょうか?
臨時教員の声もかかりやすくなるでしょうか?
中学にもいずれは「情報」の教科ができるのでしょうか?

私が卒業した大学で2年間「科目履修生」として勉強すれば
「情報」の教員免許が取れると知ったのですが、
2年もの時間を費やしていいのか、
受け身でもこのまま臨時教員として採用されるのを待って
経験を先に積んだ方がいいのか、悩んでいます。
情報の専門知識にも自信が無く、通信教育などでの資格取得は考えられません。

3月のはじめに科目履修生の手続きがあるので、
それまでに決めなければなりません。
お詳しいかたも、そうでないかたも、ご意見をお待ちしております。
是非よろしくお願い致します。

Aベストアンサー

情報に転向なさりたいのですね。現状では「中学校で情報を教える」ことは出来ません。どちらかをあきらめなければ…ということになってしまうのでしょうか。

中学に情報科目が設置されるとすれば、普通に考えると次回の学習指導要領改訂、十年くらい先…なのでしょうか。詳しく知らなくて申し訳ないのですが。

高校から中学への転勤というのもあり得るようです。「中学で教えたい」という情熱がおありなら、かなうと思いますが。

ところで、その「情報基礎(中学)」を教えるにはどんな免許が必要で、何の教科で採用なのですか?それを目指すことは不可能なのですか?それなら「中学」と「情報」が両立する気がしますが。

そのあたりは、現場の詳しい方に相談なさるとよいのでは?中学の事情はよくわからないので、「一般人」に格下げ?です。

Qなぜか Return-Path がechoできない

メールボックスにあるメールを受信してブラウザに表示したいのでが
なぜか、Return-Path の部分のメールアドレスが表示されません。
下記ソースなのですが、どこがいけないのかご教授ください
postfix 使ってます

<? // -------------------------------------------------
$user = 'a@hoge.ne.jp';
$pwd = 'hoge';
$host = "hoge.ne.jp";
$port = 110;

$fp = fsockopen($host, $port);
// ログイン
$line = fgets($fp, 512);
fputs($fp, "USER $user\r\n"); // USER名
$line = fgets($fp, 512);
fputs($fp, "PASS $pwd\r\n"); // パスワード
$line = fgets($fp, 512);

// ログイン失敗?
if(!eregi("OK", $line)){
fclose($fp);
echo 'ログイン失敗';
exit;
}

// メールボックス内のデータを取得
fputs($fp, "STAT\r\n");
$line = fgets($fp, 512);
list($stat, $num, $size) = explode(' ', $line);

// データがない?
if(0+$num == 0){
fclose($fp);
echo 'メールはありません';
exit;
}

// それぞれ受信して、配列に納める
for($id=1;$id<=$num;$id++){
fputs($fp, "RETR $id\r\n");
$line = fgets($fp);
$msg[$id] = "";
while(!eregi("^\.\r?\n",$line)){
$line = fgets($fp, 512);
echo $line.'<br>';
}
}
fputs($fp, "QUIT\r\n");
fclose($fp);
?>

メールボックスにあるメールを受信してブラウザに表示したいのでが
なぜか、Return-Path の部分のメールアドレスが表示されません。
下記ソースなのですが、どこがいけないのかご教授ください
postfix 使ってます

<? // -------------------------------------------------
$user = 'a@hoge.ne.jp';
$pwd = 'hoge';
$host = "hoge.ne.jp";
$port = 110;

$fp = fsockopen($host, $port);
// ログイン
$line = fgets($fp, 512);
fputs($fp, "USER $user\r\n"); // USER名
$line = fgets($fp, 512)...続きを読む

Aベストアンサー

> Return-Path の部分のメールアドレスが表示されません。

Message-ID も表示されないのではないでしょうか?
HTML のタグ扱いとなるのではないかと思われます。

> echo $line.'<br>';

echo htmlspecialchars($line).'<br>';

PHP: htmlspecialchars - Manual
http://jp.php.net/htmlspecialchars


人気Q&Aランキング

おすすめ情報