2011-06-28 7 views
16

を考えると、以下の文字列:PHP:Unixのタイムスタンプに日付文字列を変換

  • 01/01/11
  • 1/1/11
  • 2011年1月1日
  • 1月1日/私はトンを変換するにはどうすればよい2011
  • 2011年1月1日
  • など

Unixのタイムスタンプを参照してください。ほとんどの場合、これはさまざまな区切り文字を持つdd mm yyyyの形式になります。

答えて

25

strtotime,strptimeまたはDateTimeクラスをご覧ください。

strtotime例:

$timestamp = strtotime('1/1/2011'); 

各関数は、それは警告のしています。 (セパレータ スラッシュである場合:M/D/YまたはDMY形式で

日付が は、様々な構成要素間 セパレータを見て非曖昧化された:例えば、strtotimeのドキュメントは、と述べています/)、アメリカのm/d/yは と仮定される。区切り記号が ダッシュ( - )またはドット(。)の場合は、ヨーロッパのd-m-y形式 とみなされます。

preg_matchを使用して、3つの部分すべてをキャプチャし、mktimeを使用して独自のタイムスタンプを作成することもできます。

preg_match例:

if (preg_match('/^(?P<day>\d+)[-\/](?P<month>\d+)[-\/](?P<year>\d+)$/', '1/1/2011', $matches)) 
{ 
    $timestamp = mktime(0, 0, 0, ($matches['month'] - 1), $matches['day'], $matches['year']); 
} 
+0

あなたの正規表現はdd-mm-yyyy形式を前提としていますが、それはわかりません。 – StackOverflowNewbie

+0

@StackOverflowNewbie - あなたの質問は次のように述べています。「ほとんどの場合、これはさまざまな区切り文字でdd mm yyyyの形式になります。だから、私はそのフォーマットを使いましたが、別のフォーマットをチェックして、 'regex'をより具体的にするオリジナルのものに' elseif'文を追加することができます(つまり、\ d +の代わりに0-12を月と0 -31日)。もちろん、1/2/13の場合は、フォーマットを知らないとどちらがどちらであるかを知ることは不可能です。 –

0

おそらくstrtotime functionを探しています。

しかし、慎重に考えれば、すべての文字列を日付時刻まで曖昧さなく解析することは非常に難しいため、それぞれの可能な文字列形式をunixタイムスタンプ(エポック)に変換します。

3
$to='23.1.2014-18:16:35' 
list($part1,$part2) = explode('-', $to); 
list($day, $month, $year) = explode('.', $part1); 
list($hours, $minutes,$seconds) = explode(':', $part2); 
$timeto = mktime($hours, $minutes, $seconds, $month, $day, $year); 
echo $timeto; 
関連する問題