ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

date関数のフォーマット・オプション「y」とか「h」とか(続き)

昨日のですが。

昨日は頭に血が上っていたので、冷静さを欠いておりましたが。。。あの後、更に血圧が上がるようなことを言われて逆に凹んでしまいました。
確かにフォーマット・オプション「g」は忘れてたけどさ。。。そんなに突っ込まなくてもいいじゃない。そもそも下らないミスしてるのは誰よ?_| ̄|○


冷静に考えると、戻り値の結果を強制的に変えてしまうのは良くないので、変わりにワーニングを発生させるように変更してみました。
フォーマット・オプション「y」は強制的にワーニングを発生。
フォーマット・オプション「g」と「h」に関しては「a」か「A」が存在しないときにワーニングを発生(存在するときはワーニングは発生しない)。

--- php-4.4.9,orig/ext/standard/datetime.c	2007-12-31 16:22:52.000000000 +0900
+++ php-4.4.9/ext/standard/datetime.c	2009-06-25 17:34:56.000000000 +0900
@@ -288,6 +288,8 @@
 	struct tm *ta, tmbuf;
 	int i, size = 0, length, h, beat, fd, wd, yd, wk;
 	char tmp_buff[32];
+	int warning_flg = 0, ampm_flg = 0;
+	
 #if !HAVE_TM_GMTOFF
 	long tzone;
 	char *tname[2]= {"GMT Standard Time", "BST"};
@@ -386,18 +388,27 @@
 				size += 3;
 				break;
 			case 'y':		/* year, numeric, 2 digits */
+				size += 2;
+				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could you double-check the 'y' format!! You defined the \"%s\". Year returns 2 digits.", Z_STRVAL_PP(format));
+				break;
+			case 'h':		/* hour, numeric, 12 hour format */
+			case 'g':		/* hour, numeric, 12 hour format, no leading zeroes */
+				size += 2;
+				warning_flg = 1;
+				break;
+			case 'A':		/* AM/PM */
+			case 'a':		/* am/pm */
+				size += 2;
+				ampm_flg = 1;
+				break;
 			case 'm':		/* month, numeric */
 			case 'n':		/* month, numeric, no leading zeroes */
 			case 'd':		/* day of the month, numeric */
 			case 'j':		/* day of the month, numeric, no leading zeros */
 			case 'H':		/* hour, numeric, 24 hour format */
-			case 'h':		/* hour, numeric, 12 hour format */
 			case 'G':		/* hour, numeric, 24 hour format, no leading zeroes */
-			case 'g':		/* hour, numeric, 12 hour format, no leading zeroes */
 			case 'i':		/* minutes, numeric */
 			case 's':		/* seconds, numeric */
-			case 'A':		/* AM/PM */
-			case 'a':		/* am/pm */
 			case 'S':		/* standard english suffix for the day of the month (e.g. 3rd, 2nd, etc) */
 			case 't':		/* days in current month */
 			case 'W':		/* ISO-8601 week number of year, weeks starting on Monday */
@@ -418,6 +429,10 @@
 		}
 	}
 
+	if (warning_flg && !ampm_flg) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could you double-check the 'g' or 'h' format!! You defined the \"%s\". Hour returns 12 hour format.", Z_STRVAL_PP(format));
+	}
+
 	Z_STRVAL_P(return_value) = (char *) emalloc(size + 1);
 	Z_STRVAL_P(return_value)[0] = '\0';
 
--- php-5.2.10,orig/ext/date/php_date.c	2009-06-06 07:34:30.000000000 +0900
+++ php-5.2.10/ext/date/php_date.c	2009-06-25 17:57:53.000000000 +0900
@@ -743,6 +743,7 @@
 	timelib_time_offset *offset = NULL;
 	timelib_sll          isoweek, isoyear;
 	int                  rfc_colon;
+	int warning_flg = 0, ampm_flg = 0;
 
 	if (!format_len) {
 		return estrdup("");
@@ -797,12 +798,15 @@
 
 			/* year */
 			case 'L': length = slprintf(buffer, 32, "%d", timelib_is_leap((int) t->y)); break;
-			case 'y': length = slprintf(buffer, 32, "%02d", (int) t->y % 100); break;
+			case 'y':
+				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could you double-check the 'y' format!! You defined the \"%s\". Year returns 2 digits.", format);
+				length = slprintf(buffer, 32, "%02d", (int) t->y % 100);
+				break;
 			case 'Y': length = slprintf(buffer, 32, "%s%04ld", t->y < 0 ? "-" : "", llabs(t->y)); break;
 
 			/* time */
-			case 'a': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "pm" : "am"); break;
-			case 'A': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "PM" : "AM"); break;
+			case 'a': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "pm" : "am"); ampm_flg = 1; break;
+			case 'A': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "PM" : "AM"); ampm_flg = 1; break;
 			case 'B': {
 				int retval = (((((long)t->sse)-(((long)t->sse) - ((((long)t->sse) % 86400) + 3600))) * 10) / 864);			
 				while (retval < 0) {
@@ -812,9 +816,9 @@
 				length = slprintf(buffer, 32, "%03d", retval);
 				break;
 			}
-			case 'g': length = slprintf(buffer, 32, "%d", (t->h % 12) ? (int) t->h % 12 : 12); break;
+			case 'g': length = slprintf(buffer, 32, "%d", (t->h % 12) ? (int) t->h % 12 : 12); warning_flg = 1; break;
 			case 'G': length = slprintf(buffer, 32, "%d", (int) t->h); break;
-			case 'h': length = slprintf(buffer, 32, "%02d", (t->h % 12) ? (int) t->h % 12 : 12); break;
+			case 'h': length = slprintf(buffer, 32, "%02d", (t->h % 12) ? (int) t->h % 12 : 12); warning_flg = 1; break;
 			case 'H': length = slprintf(buffer, 32, "%02d", (int) t->h); break;
 			case 'i': length = slprintf(buffer, 32, "%02d", (int) t->i); break;
 			case 's': length = slprintf(buffer, 32, "%02d", (int) t->s); break;
@@ -880,6 +884,10 @@
 		smart_str_appendl(&string, buffer, length);
 	}
 
+	if (warning_flg && !ampm_flg) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could you double-check the 'g' or 'h' format!! You defined the \"%s\". Hour returns 12 hour format.", format);
+	}
+
 	smart_str_0(&string);
 
 	if (localtime) {
@@ -997,7 +1005,10 @@
 
 		/* year */
 		case 'L': retval = (int) timelib_is_leap((int) t->y); break;
-		case 'y': retval = (int) (t->y % 100); break;
+		case 'y':
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could you double-check the 'y' format!! You defined the \"%c\". Year returns 2 digits.", format);
+			retval = (int) (t->y % 100);
+			break;
 		case 'Y': retval = (int) t->y; break;
 
 		/* Swatch Beat a.k.a. Internet Time */
@@ -1010,7 +1021,10 @@
 			break;
 
 		/* time */
-		case 'g': case 'h': retval = (int) ((t->h % 12) ? (int) t->h % 12 : 12); break;
+		case 'g': case 'h':
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could you double-check the 'g' or 'h' format!! You defined the \"%c\". Hour returns 12 hour format.", format);
+			retval = (int) ((t->h % 12) ? (int) t->h % 12 : 12);
+			break;
 		case 'H': case 'G': retval = (int) t->h; break;
 		case 'i': retval = (int) t->i; break;
 		case 's': retval = (int) t->s; break;
--- php-5.3.0RC4,orig/ext/date/php_date.c	2009-06-18 02:56:17.000000000 +0900
+++ php-5.3.0RC4/ext/date/php_date.c	2009-06-25 18:11:47.000000000 +0900
@@ -995,6 +995,7 @@
 	timelib_time_offset *offset = NULL;
 	timelib_sll          isoweek, isoyear;
 	int                  rfc_colon;
+	int warning_flg = 0, ampm_flg = 0;
 
 	if (!format_len) {
 		return estrdup("");
@@ -1049,12 +1050,15 @@
 
 			/* year */
 			case 'L': length = slprintf(buffer, 32, "%d", timelib_is_leap((int) t->y)); break;
-			case 'y': length = slprintf(buffer, 32, "%02d", (int) t->y % 100); break;
+			case 'y':
+				php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could you double-check the 'y' format!! You defined the \"%s\". Year returns 2 digits.", format);
+				length = slprintf(buffer, 32, "%02d", (int) t->y % 100);
+				break;
 			case 'Y': length = slprintf(buffer, 32, "%s%04ld", t->y < 0 ? "-" : "", llabs((timelib_sll) t->y)); break;
 
 			/* time */
-			case 'a': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "pm" : "am"); break;
-			case 'A': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "PM" : "AM"); break;
+			case 'a': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "pm" : "am"); ampm_flg = 1; break;
+			case 'A': length = slprintf(buffer, 32, "%s", t->h >= 12 ? "PM" : "AM"); ampm_flg = 1; break;
 			case 'B': {
 				int retval = (((((long)t->sse)-(((long)t->sse) - ((((long)t->sse) % 86400) + 3600))) * 10) / 864);			
 				while (retval < 0) {
@@ -1064,9 +1068,9 @@
 				length = slprintf(buffer, 32, "%03d", retval);
 				break;
 			}
-			case 'g': length = slprintf(buffer, 32, "%d", (t->h % 12) ? (int) t->h % 12 : 12); break;
+			case 'g': length = slprintf(buffer, 32, "%d", (t->h % 12) ? (int) t->h % 12 : 12); warning_flg = 1; break;
 			case 'G': length = slprintf(buffer, 32, "%d", (int) t->h); break;
-			case 'h': length = slprintf(buffer, 32, "%02d", (t->h % 12) ? (int) t->h % 12 : 12); break;
+			case 'h': length = slprintf(buffer, 32, "%02d", (t->h % 12) ? (int) t->h % 12 : 12); warning_flg = 1; break;
 			case 'H': length = slprintf(buffer, 32, "%02d", (int) t->h); break;
 			case 'i': length = slprintf(buffer, 32, "%02d", (int) t->i); break;
 			case 's': length = slprintf(buffer, 32, "%02d", (int) t->s); break;
@@ -1132,6 +1136,10 @@
 		smart_str_appendl(&string, buffer, length);
 	}
 
+	if (warning_flg && !ampm_flg) {
+		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could you double-check the 'g' or 'h' format!! You defined the \"%s\". Hour returns 12 hour format.", format);
+	}
+
 	smart_str_0(&string);
 
 	if (localtime) {
@@ -1249,7 +1257,10 @@
 
 		/* year */
 		case 'L': retval = (int) timelib_is_leap((int) t->y); break;
-		case 'y': retval = (int) (t->y % 100); break;
+		case 'y':
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could you double-check the 'y' format!! You defined the \"%c\". Year returns 2 digits.", format);
+			retval = (int) (t->y % 100);
+			break;
 		case 'Y': retval = (int) t->y; break;
 
 		/* Swatch Beat a.k.a. Internet Time */
@@ -1262,7 +1273,10 @@
 			break;
 
 		/* time */
-		case 'g': case 'h': retval = (int) ((t->h % 12) ? (int) t->h % 12 : 12); break;
+		case 'g': case 'h':
+			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could you double-check the 'g' or 'h' format!! You defined the \"%c\". Hour returns 12 hour format.", format);
+			retval = (int) ((t->h % 12) ? (int) t->h % 12 : 12);
+			break;
 		case 'H': case 'G': retval = (int) t->h; break;
 		case 'i': retval = (int) t->i; break;
 		case 's': retval = (int) t->s; break;

gist.githubにも登録しておきました。

以下が4.4.9の実行結果。

% /usr/local/src/php-4.4.9,orig/sapi/cli/php -r 'var_dump( date( "y/m/d" ) );'
string(8) "09/06/25"
% /usr/local/src/php-4.4.9,orig/sapi/cli/php -r 'var_dump( date( "Y/m/d" ) );'
string(10) "2009/06/25"
% /usr/local/src/php-4.4.9,orig/sapi/cli/php -r 'var_dump( date( "h:i:s" ) );'
string(8) "05:38:00"
% /usr/local/src/php-4.4.9,orig/sapi/cli/php -r 'var_dump( date( "H:i:s" ) );'
string(8) "17:38:00"
% /usr/local/src/php-4.4.9,orig/sapi/cli/php -r 'var_dump( date( "g:i:s" ) );'
string(7) "5:38:00"
% /usr/local/src/php-4.4.9,orig/sapi/cli/php -r 'var_dump( date( "G:i:s" ) );'
string(8) "17:38:00"
% /usr/local/src/php-4.4.9,orig/sapi/cli/php -r 'var_dump( date( "ah:i:s" ) );'
string(10) "pm05:38:00"
% /usr/local/src/php-4.4.9,orig/sapi/cli/php -r 'var_dump( date( "ag:i:s" ) );'
string(9) "pm5:38:00"
% /usr/local/src/php-4.4.9,orig/sapi/cli/php -r 'var_dump( date( "Ah:i:s" ) );'
string(10) "PM05:38:00"
% /usr/local/src/php-4.4.9,orig/sapi/cli/php -r 'var_dump( date( "Ag:i:s" ) );'
string(9) "PM5:38:00"
%
%
% /usr/local/src/php-4.4.9/sapi/cli/php -r 'var_dump( date( "y/m/d" ) );'

Warning: date(): Could you double-check the 'y' format!! You defined the "y/m/d". Year returns 2 digits. in Command line code on line 1
string(8) "09/06/25"
% /usr/local/src/php-4.4.9/sapi/cli/php -r 'var_dump( date( "Y/m/d" ) );'
string(10) "2009/06/25"
% /usr/local/src/php-4.4.9/sapi/cli/php -r 'var_dump( date( "h:i:s" ) );'

Warning: date(): Could you double-check the 'g' or 'h' format!! You defined the "h:i:s". Hour returns 12 hour format. in Command line code on line 1
string(8) "05:38:16"
% /usr/local/src/php-4.4.9/sapi/cli/php -r 'var_dump( date( "H:i:s" ) );'
string(8) "17:38:19"
% /usr/local/src/php-4.4.9/sapi/cli/php -r 'var_dump( date( "g:i:s" ) );'

Warning: date(): Could you double-check the 'g' or 'h' format!! You defined the "g:i:s". Hour returns 12 hour format. in Command line code on line 1
string(7) "5:38:23"
% /usr/local/src/php-4.4.9/sapi/cli/php -r 'var_dump( date( "G:i:s" ) );'
string(8) "17:38:26"
% /usr/local/src/php-4.4.9/sapi/cli/php -r 'var_dump( date( "ah:i:s" ) );'
string(10) "pm05:38:31"
% /usr/local/src/php-4.4.9/sapi/cli/php -r 'var_dump( date( "ag:i:s" ) );'
string(10) "pm5:38:32"
% /usr/local/src/php-4.4.9/sapi/cli/php -r 'var_dump( date( "Ah:i:s" ) );'
string(10) "PM05:38:36"
% /usr/local/src/php-4.4.9/sapi/cli/php -r 'var_dump( date( "Ag:i:s" ) );'
string(9) "PM5:38:38"
%

以下が5.2.10の実行結果。

% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "y/m/d" ) );'
string(8) "09/06/25"
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Y/m/d" ) );'
string(10) "2009/06/25"
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "h:i:s" ) );'
string(8) "06:01:44"
%/usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "H:i:s" ) );'
string(8) "18:01:44"
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "g:i:s" ) );'
string(7) "6:01:44"
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "G:i:s" ) );'
string(8) "18:01:44"
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "ah:i:s" ) );'
string(10) "pm06:01:44"
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "ag:i:s" ) );'
string(9) "pm6:01:44"
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Ah:i:s" ) );'
string(10) "PM06:01:44"
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Ag:i:s" ) );'
string(9) "PM6:01:44"
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "y" ) );'
int(9)
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "Y" ) );'
int(2009)
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "g" ) );'
int(6)
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "h" ) );'
int(6)
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "G" ) );'
int(18)
% /usr/local/src/php-5.2.10,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "H" ) );'
int(18)
%
%
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "y/m/d" ) );'

Warning: date(): Could you double-check the 'y' format!! You defined the "y/m/d". Year returns 2 digits. in Command line code on line 1
string(8) "09/06/25"
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Y/m/d" ) );'
string(10) "2009/06/25"
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "h:i:s" ) );'

Warning: date(): Could you double-check the 'g' or 'h' format!! You defined the "h:i:s". Hour returns 12 hour format. in Command line code on line 1
string(8) "06:05:44"
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "H:i:s" ) );'
string(8) "18:05:44"
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "g:i:s" ) );'

Warning: date(): Could you double-check the 'g' or 'h' format!! You defined the "g:i:s". Hour returns 12 hour format. in Command line code on line 1
string(7) "6:05:44"
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "G:i:s" ) );'
string(8) "18:05:44"
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "ah:i:s" ) );'
string(10) "pm06:05:44"
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "ag:i:s" ) );'
string(9) "pm6:05:44"
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Ah:i:s" ) );'
string(10) "PM06:05:44"
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Ag:i:s" ) );'
string(9) "PM6:05:44"
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "y" ) );'

Warning: idate(): Could you double-check the 'y' format!! You defined the "y". Year returns 2 digits. in Command line code on line 1
int(9)
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "Y" ) );'
int(2009)
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "g" ) );'

Warning: idate(): Could you double-check the 'g' or 'h' format!! You defined the "g". Hour returns 12 hour format. in Command line code on line 1
int(6)
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "h" ) );'

Warning: idate(): Could you double-check the 'g' or 'h' format!! You defined the "h". Hour returns 12 hour format. in Command line code on line 1
int(6)
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "G" ) );'
int(18)
% /usr/local/src/php-5.2.10/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "H" ) );'
int(18)
%

以下が5.3.0RC4の実行結果。

% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "y/m/d" ) );'
string(8) "09/06/25"
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Y/m/d" ) );'
string(10) "2009/06/25"
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "h:i:s" ) );'
string(8) "06:15:09"
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "H:i:s" ) );'
string(8) "18:15:09"
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "g:i:s" ) );'
string(7) "6:15:09"
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "G:i:s" ) );'
string(8) "18:15:09"
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "ah:i:s" ) );'
string(10) "pm06:15:09"
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "ag:i:s" ) );'
string(9) "pm6:15:09"
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Ah:i:s" ) );'
string(10) "PM06:15:09"
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Ag:i:s" ) );'
string(9) "PM6:15:09"
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "y" ) );'
int(9)
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "Y" ) );'
int(2009)
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "g" ) );'
int(6)
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "h" ) );'
int(6)
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "G" ) );'
int(18)
% /usr/local/src/php-5.3.0RC4,orig/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "H" ) );'
int(18)
%
%
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "y/m/d" ) );'

Warning: date(): Could you double-check the 'y' format!! You defined the "y/m/d". Year returns 2 digits. in Command line code on line 1
string(8) "09/06/25"
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Y/m/d" ) );'
string(10) "2009/06/25"
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "h:i:s" ) );'

Warning: date(): Could you double-check the 'g' or 'h' format!! You defined the "h:i:s". Hour returns 12 hour format. in Command line code on line 1
string(8) "06:15:51"
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "H:i:s" ) );'
string(8) "18:15:53"
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "g:i:s" ) );'

Warning: date(): Could you double-check the 'g' or 'h' format!! You defined the "g:i:s". Hour returns 12 hour format. in Command line code on line 1
string(7) "6:15:55"
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "G:i:s" ) );'
string(8) "18:15:57"
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "ah:i:s" ) );'
string(10) "pm06:16:00"
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "ag:i:s" ) );'
string(9) "pm6:16:02"
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Ah:i:s" ) );'
string(10) "PM06:16:03"
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( date( "Ag:i:s" ) );'
string(9) "PM6:16:05"
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "y" ) );'

Warning: idate(): Could you double-check the 'y' format!! You defined the "y". Year returns 2 digits. in Command line code on line 1
int(9)
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "Y" ) );'
int(2009)
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "g" ) );'

Warning: idate(): Could you double-check the 'g' or 'h' format!! You defined the "g". Hour returns 12 hour format. in Command line code on line 1
int(6)
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "h" ) );'

Warning: idate(): Could you double-check the 'g' or 'h' format!! You defined the "h". Hour returns 12 hour format. in Command line code on line 1
int(6)
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "G" ) );'
int(18)
% /usr/local/src/php-5.3.0RC4/sapi/cli/php -ddate.timezone='Asia/Tokyo' -r 'var_dump( idate( "H" ) );'
int(18)
%

軽はずみは発言は控えよう。。。ということで。それにしても見づらいね。_| ̄|○


一点、気がついたのですが、idate関数のマニュアル(formatの説明)と実装とで差があることに気がつきました。
フォーマット・オプション「g」は「h」と同じ挙動をして、「G」は「H」と同じ挙動をするようです。これって既出?