phpのstrtotime()に相当するJavascript?


83

PHPでは、英語のテキストによる日時の説明をstrtotime()。を使用して適切な日付に簡単に変換できます。

Javascriptに似たものはありますか?


dd.mm.yyyyの形式から解析するには、stackoverflow.com

回答:


52

この記事を見つけ、チュートリアルを試しました。基本的に、日付コンストラクターを使用して日付を解析し、getTime()メソッドから秒を取得するように記述できます。

var d=new Date("October 13, 1975 11:13:00");
document.write(d.getTime() + " milliseconds since 1970/01/01");

これは機能しますか?


日付がdmY形式でフォーマットされているので動作しないようです。
Valentin Despa 2013

30
-1。これは、RFC822またはISO8601形式の日付のみを対象としていstrtotime()ますが、他の多くの形式をサポートしています。
ジャック

1
これはOPのユースケースを満たすために発生する可能性がありますが、技術的に正しくなく、質問に対する無効な回答です。Westy92の答えを参照してください(そして賛成してください)。
ネイトアベレ2016年

68

はい、そうです。そしてそれはすべての主要なブラウザでサポートされています:

var ts = Date.parse("date string");

唯一の違いは、この関数は秒ではなくミリ秒を返すため、結果を1000で割る必要があることです。

JavaScriptが解析できる有効な形式を確認してください。


29
いいえ、これはphpstrtotimeとは大きく異なり、phpドキュメントの例はどれも機能せず、1つも機能しませんstrtotime("now"); strtotime("10 September 2000"); strtotime("+1 day"); strtotime("+1 week"); strtotime("+1 week 2 days 4 hours 2 seconds"); strtotime("next Thursday"); strtotime("last Monday");
Ivan Castellanos

1
@Arnaldoに感謝します。これは私のために働いています。「Djechelon's」よりも受け入れられるあなたの答え
Adi

これは機能するはずですが、信頼性がありません。Date.parse( '2020-06-06')は、Date.parse( 'June 6、2020')と同じタイムスタンプを返す必要がありますが、そうではありません。(1591401600000対1591423200000)
Vincent

35

JavaScriptでのPHPのstrtotime()のこの実装をチェックしてください!

私が投げたすべての点で、PHPと同じように機能することがわかりました。

更新:バージョン1.0.2によるこの関数は、このケースを処理できません:(年と月の区切り文字に'2007:07:20 20:52:45' 注意してください:

2018年の更新:

これがnpmモジュールとして利用可能になりました!単純にnpm install locutusそしてあなたの情報源で:

var strtotime = require('locutus/php/datetime/strtotime');

3
私は通常、ライブラリへの単なるリンクである回答は好きではありませんが、この場合、JavaScriptはほとんどクレイジーなケースをstrtotimeとして処理しないため、これは素晴らしい回答です。ありがとうございました!
ファスティ2017年

Locutusの最新リリース(現時点では2018年9月7日)は、「昨日19:00」のような文字列を処理しません。
ニコラ

4

私はphpのstrtotime()を嫉妬しますが、私はモーメントを使用してjavascriptで私のことをします。phpからのものほど甘くはありませんが、トリックもきちんと行います。

// first day of the month
var firstDayThisMonth = moment(firstDayThisMonth).startOf('month').toDate();

使用前後に行くsubtract()add()してendOf()としstartOf()

// last day of previous month
var yesterMonthLastDay = moment(yesterMonthLastDay).subtract(1,'months').endOf('month').toDate();

0

文字列を解析するためのブラウザのサポートに一貫性がありません。どのフォーマットをサポートするかについての仕様がないため、一部のブラウザーで機能するものは他のブラウザーでは機能しません。

Moment.jsを試してください-日付解析するためのクロスブラウザ機能を提供します

var timestamp = moment("2013-02-08 09:30:26.123");
console.log(timestamp.milliseconds()); // return timestamp in milliseconds
console.log(timestamp.second()); // return timestamp in seconds

これは質問に完全には答えません(そして否定的なスコアを持っています)。報奨金を取り消す方法はありますか?
Westy92 2017年

0

同様の動作を提供するモジュールはほとんどありませんが、PHPのstrtotimeとまったく同じではありません。いくつかの選択肢の中で、date-util が最良の結果をもたらすことがわかりました。


0

var strdate = new Date('Tue Feb 07 2017 12:51:48 GMT+0200 (Türkiye Standart Saati)');
var date = moment(strdate).format('DD.MM.YYYY');
$("#result").text(date); //07.02.2017
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>

<div id="result"></div>


非推奨の警告:提供された値は認識されたISO形式ではありません。構築がjsにフォールバックする瞬間Date()–すっごく…new Date(strdate)実際と同じ…
–deceze

0

たぶんあなたは次のようなサンプル関数を利用することができます:

function strtotime(date, addTime){
  let generatedTime=date.getTime();
  if(addTime.seconds) generatedTime+=1000*addTime.seconds; //check for additional seconds 
  if(addTime.minutes) generatedTime+=1000*60*addTime.minutes;//check for additional minutes 
  if(addTime.hours) generatedTime+=1000*60*60*addTime.hours;//check for additional hours 
  return new Date(generatedTime);
}

let futureDate = strtotime(new Date(), {
    hours: 1, //Adding one hour
    minutes: 45 //Adding fourty five minutes
  });
document.body.innerHTML = futureDate;

`

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.