2012-03-02 6 views
5

私はstrtotime()は奇妙な方法でのUNIXタイムスタンプを扱うことに気づいた、と誰もがそれである理由を知っている場合、私は興味があった:なぜstrtotime()がそれを理解するために、UNIXのタイムスタンプの先頭に '@'を付ける必要がありますか?

var_export(strtotime('1330725042')); // false 
var_export(strtotime('@1330725042')); // 1330725042 

なぜタイムスタンプが@が付けられた場合を除き(Unixタイムスタンプを与えstrtotime()リターンfalse )?

これは、未知の形式の変数をタイムスタンプに「解決」するために作成したライブラリメソッドの内部からのものです。 strtotime()を使用すると、受信値が実際にタイムスタンプのときに間違った結果を返すので、この場合は役に立ちません。

タイムスタンプのような値を明示的にチェックして修正しないようにライブラリメソッドを修正しました。したがって、この問題のための実用的なアプリケーションはもうありません。私はちょうど興味がある。

+4

ドキュメントにはこう書かれているので:http://www.php.net/manual/en/datetime.formats.compound.php整数は有効な日付/時刻フォーマットではないと思います – Tchoupi

+0

+1そのマチューを結ぶ。私はそこにドキュメントがあると思った*どこか*。 – Josh

+0

ありがとうございます。私は実際には、UNIXのタイムスタンプが有効なPHPのDateTime形式であるとは考えていませんでした。 – Tchoupi

答えて

5

strtotime()が受け取る文字列は、特定の形式でなければなりません。 http://www.php.net/manual/en/datetime.formats.php

strtotime()が入力フォーマットを認識しない場合は、FALSEを返します。あなたが使用しているフォーマットを明示的に指定しない限り、unix時間は数字のシーケンスなので、正しく解析できません。 @を最初に置くと、関数はこのシーケンスがunix時間形式であることを指示します。他 http://php.net/manual/en/function.strtotime.php

+2

リンクをありがとう。「Unixタイムスタンプ\t」@ "" - "[0-9] + \t "@ 1215282385" 'http://php.net/datetime.formats.compound –

1

strtotimeはの文字列を意味するであり、 "1330725042"は時間文字列ではなく、引用符で囲まれたunixタイムスタンプです。

strtotime()は、 "2-March-2012"のような値に使用されることを意図しています。

あなたはすでにunixのタイムスタンプ値として1330725042を持っていたら、なぜstrtotime()を使用する必要がありますか?

+0

WRTなぜタイムスタンプ上で 'strtotime()'を呼び出すのですか?この疑問の背景にある動機は、 –

+0

あなたが提供しているものについてstrtotimeを呼び出す、あなたがタイムスタンプを持っている他人のライブラリを使用している可能性があります。 – derekdreery

1

strtotime()はタイムスタンプを出力し、そのパラメータは日付のテキスト表現である必要がありますので、間違って使用してください。

2

おそらくstrtotimeからにUNIXタイムスタンプを変換するので、パラメータとしては期待していません。

読むmore

0

のstrtotimeは、UNIXタイムスタンプが、平易な英語の日付または

値は必ず「トリガする前に、@(「1日」または「1ヶ月」のような)相対時間を認識しません。コール中のphpの "ignore error"モード(面白い副作用)を返すので、解析不能な値をvarダンプに返すことができます。

+0

'' @ 1215282385 "'は実際には有効なフォーマットですコメントのリンクを見てください – Josh

+0

残念ながら、 '@ 'の存在がこの場合のエラーを抑止することとは何の関係もないので、-1とする必要があります;これはPHPの文書化されたunixタイムスタンプ](http://php.net/datetime.formats.compound)。 –

0

誰もが関数の使い方で正しいであり、それは文字列ではなくタイムスタンプ文字列を受け入れること:

は、詳細については、こちらのドキュメントです。しかし、@記号を使用して結果を取得している場合は、次のテキストを示す演算子がタイムスタンプであるか、関数がPHPの@の標準使用法に従ってエラーをバイパスしている可能性があります。

いずれにしても、なぜタイムスタンプをstrtotimeしたいですか?

+0

WRTなぜタイムスタンプ上で 'strtotime()'を呼び出すのですか?この質問の背後にある動機は、コードが値すでにタイムスタンプです。私はより多くの情報で私の質問を更新しました。 –

+0

残念ながら、 '@ 'の存在はこの場合のエラーを抑制することとは関係がないため、-1にする必要があります。これは[PHPの文書化されたunixタイムスタンプの形式](http://php.net/datetime.formats.compound)の一部です。 –

0

strtotime()は、英語の日付形式をUNIXのタイムスタンプに変換するためのものです。したがって、日付形式の代わりにUNIXのタイムスタンプを指定すると、この関数を有効に使用できません。受け入れられる日付と時刻の形式は、PHPマニュアルのhttp://php.net/manual/en/datetime.formats.php

0

で見ることができます。答えは、先頭の@がunixタイムスタンプの日付形式を表していますが、整数は無効な日付形式です。 http://php.net/manual/en/datetime.formats.compound.php

なぜstrtotime('@1 a')が-3599というエラーのない結果を出すのですが、わかりません。 lol

関連する問題