0

JavaScriptを使用して、現在の日付の2回の間の時間を計算しようとしています。これに似た質問は他にもありますが、どれもうまくいかないようで、私が見つけることができる多くの賛成票を持っているものはほとんどありません。

私は次のものを持っていますが、これは回線上で失敗します:var diff = new Date(time1 - time2);、これは常にアラートが発生したときに私に与えるinvalid Dateので、明らかに失敗しています。理由がわからない。

最初の日付は、入力フィールドにhh:mm:ssの形式で追加されます。私はjQueryを使用しています。

$(function(){

$('#goTime').click(function(){
  var currentDate = new Date();

  var dateString = (strpad(currentDate.getDate()) +'-'+ strpad(currentDate.getMonth()+1)+'-'+currentDate.getFullYear()+' '+ $('#starttime').val());

  var time1 = new Date(dateString).getTime();
  var time2 = new Date().getTime();

  var diff = new Date(time1 - time2);

  var hours = diff.getHours();
  var minutes = diff.getMinutes();
  var seconds = diff.getMinutes();

  alert(hours + ':' + minutes + ':' + seconds);

});
  });
  function strpad(val){ 
        return (!isNaN(val) && val.toString().length==1)?"0"+val:val; 
  }

dateString等しい:14-01-2013 23:00

4

4 に答える 4

3

dateString後方にフィー​​ルドがあります。年と日のフィールドを入れ替えます...

> new Date('14-01-2013 23:00')
Invalid Date
> new Date('2013-01-14 23:00')
Mon Jan 14 2013 23:00:00 GMT-0800 (PST)
于 2013-01-14T22:31:31.333 に答える
0

2つの日付間の時間差を計算しようとしている場合は、それを行うために新しい日付オブジェクトを作成する必要はありません。

  var time1 = new Date(dateString).getTime();
  var time2 = new Date().getTime();

  var diff = time1 - time2;// number of milliseconds 

  var seconds = diff/1000;
  var minutes = seconds/60;
  var hours = minutes/60;

編集:日付文字列が正しくフォーマットされていることを確認するために、broofaの回答も考慮に入れる必要があります

getTime関数は、1970年1月1日からのミリ秒数を返します。したがって、2つの値を減算すると、各日付オブジェクト間のミリ秒数が残ります。その値をDateコンストラクターに渡すと、結果のdateオブジェクトは期待したものにはなりません。getTimeを参照してください

于 2013-01-14T22:40:42.173 に答える
0

で無効な時間が発生していますdatestringtime1ですNaN、そしてそうdiffなります。これを使用する方が良いかもしれません:

var date = new Date();
var match = /^(\d+):(\d+):(\d+)$/.exec($('#starttime').val()); // enforcing format
if (!match)
    return alert("Invalid input!"); // abort
date.setHours(parseInt(match[1], 10));
date.setMinutes(parseInt(match[2], 10));
date.setSeconds(parseInt(match[3], 10));

var diff = Date.now() - date;
于 2013-01-14T22:40:49.227 に答える
0

dd-MM-yyyy HH:mmによって有効な時間形式として認識されませんnew Date()。ただし、いくつかのオプションがあります。

  • ダッシュの代わりにスラッシュを使用します。dd/MM/yyyy HH:mm日付文字列は正しく解析されます。
  • ISO日付文字列を使用します:yyyy-MM-dd HH:mmも認識されます。
  • 自分でDateオブジェクトを作成します。

2番目のオプションでは、本当に時間だけを気にするので、自分で時間文字列を分割して、それらを次のように渡すことができますDate.setHours(h, m, s)

var timeParts = $('#starttime').val().split(':', 2);
var time1 = new Date();
time1.setHours(timeParts[0], timeParts[1]);
于 2013-01-14T22:37:47.597 に答える