strtotimeメソッドを使用する前にシステムタイムゾーンに注意してください

3397 ワード

strtotimeは、潜在的な時間文字列を正しい時間に変換するときに、現在のシステムタイムゾーンに使用します.システムタイムゾーンが、与えられたターゲット文字列に示すタイムゾーンと異なる場合、呼び出し後に生成される時間は、想像していた時間と時間的にずれる.したがって、このメソッドを呼び出す前に、まず現在のシステムタイムゾーンを決定する必要がある.
 
date_を呼び出すことができますdefault_timezone_get()現在のタイムゾーンを取得します.通常、デフォルトのタイムゾーンはUTC、すなわち標準タイムゾーン+0000である.システムタイムゾーンを設定するには、次の2つの方法があります.
1、phpを修正する.iniプロファイル.
[Date] ; Defines the default timezone used by the date functions ;date.timezone =
上記の部分のdateをtiemzoneを放し、必要なタイムゾーンに設定
 
2、タイムゾーンを設定する必要がある場所でdate_を呼び出すdefault_timezone_set()メソッドでタイムゾーンを設定します.
 
「Sat May 14 22:35:44+0800 2011」を例に説明します.私たちの目標は、その中の'22:35:44'時間を取得することです.
 
「Sat May 14 22:35:44+0800 2011」は+0800時区、いわゆる北京時間であることがわかります.ではstrtotimeという文字列の前に、システムタイムゾーンが北京タイムゾーンであることを確認する必要があります.PHPでは北京タイムゾーンはPRCで表示できます.PHP 5+の場合は、Asia/ShhanghaiまたはAsia/Chongqingで設定することもできます.
 
ここでは、システムタイムゾーンを設定するために第2の方法を採用します.テストコードは次のとおりです.
<?
	$str = 'Sat May 14 22:35:44 +0800 2011';
	$current_timezone = date_default_timezone_get();
	
	$strTtime = strtotime($str);
	
?>
<table border = '1'>
		<caption>      </caption>
		<tr>
			<td>     </td>
			<td><?=$str?></td>
		</tr>
		<tr>
			<td>    </td>
			<td><?=$current_timezone?></td>
		</tr>
		<tr>
			<td>         ('r')</td>
			<td><?=date('r',$strTtime)?></td>
		</tr>
		<tr>
			<td>         ('H:i:s')</td>
			<td><?=date('H:i:s',$strTtime)?></td>
		</tr>
</table>
<br/></br>
<?
	date_default_timezone_set('Asia/Shanghai'); 
	$l_current_timezone = date_default_timezone_get();
	$l_strTtime = strtotime($str);
?>
<table border = '1'>
		<caption>     </caption>
		<tr>
			<td>     </td>
			<td><?=$str?></td>
		</tr>
		<tr>
			<td>    </td>
			<td><?=$l_current_timezone?></td>
		</tr>
		<tr>
			<td>         ('r')</td>
			<td><?=date('r',$l_strTtime)?></td>
		</tr>
		<tr>
			<td>         ('H:i:s')</td>
			<td><?=date('H:i:s',$l_strTtime)?></td>
		</tr>
</table>
<? 
	//     ,          
	date_default_timezone_set($current_timezone);
?>

次の結果が表示されます.
 
タイムゾーンが設定されていない前
時間文字列
Sat May 14 22:35:44 +0800 2011
現在のタイムゾーン
UTC
文字変換後の日付フォーマット('r')
Sat, 14 May 2011 14:35:44 +0000
文字変換後の日付フォーマット('H:i:s')
14:35:44
 
タイムゾーン設定後
時間文字列
Sat May 14 22:35:44 +0800 2011
現在のタイムゾーン
Asia/Shanghai
文字変換後の日付フォーマット('r')
Sat, 14 May 2011 22:35:44 +0800
文字変換後の日付フォーマット('H:i:s')
22:35:44
注:第2の方法を使用する場合は、使用が完了したら、システムタイムゾーンを初期設定に復元します.後続の呼び出しエラーを回避します.
 
PS:その他のタイムゾーン設定やコードに関する方法は、PHP APIを見てより多くの使い方を知ることができます.http://www.php.net/manual/zh/index.php