10

dd.mm.YYYYまたはdmYYYYまたはdd.m.YYYYまたはd.mm.YYYYのようなフィンランドの時間形式の2つの日付を比較しようとしています。

これを行う方法を見つけるのに苦労しています。現在のコードは機能しません。

<script src="inc/date-fi-FI.js" type="text/javascript"></script>
<script type="text/javascript">
    function parseDate() {
        var date = $('#date').val();
        var parsedDate = Date.parse(date);
        alert('Parsed date: '+parsedDate);
    }
    function jämförMedIdag (datum) {
    if (datum == null || datum == "") {
        alert('Inget datum!');
        return;
    }
    /*resultat = Date.compare(Datum1,Datum2);
    alert(resultat); */
    var datum = Date.parse(datum);
    var dagar = datum.getDate();
    var månader = datum.getMonth();
    var år = datum.getYear();
    var nyttDatum = new Date();
    nyttDatum.setFullYear(år,månader,dagar);
    var idag = new Date();

    if(nyttDatum>idag) {
        var svar = nyttDatum - idag;
        svar = svar.toString("dd.MM.yyyy");
        alert(svar);
        return(svar);
    } else {
        var svar = idag - nyttDatum;
        svar = svar.toString("dd.MM.yyyy");
        alert(svar);
        return(svar);
    }
}    
</script>

このコードは、2つの日付の差を計算しようとします。そのうちの1つは今日です。成功しません笑。

前もって感謝します!

私の最終的なコード(RobGに感謝します!):

function dateDiff(a,b,format) {
    var milliseconds = toDate(a) - toDate(b);
    var days = milliseconds / 86400000;
    var hours = milliseconds / 3600000;
    var weeks = milliseconds / 604800000;
    var months = milliseconds / 2628000000;
    var years = milliseconds / 31557600000;
    if (format == "h") {
        return Math.round(hours);
    }
    if (format == "d") {
        return Math.round(days);
    }
    if (format == "w") {
        return Math.round(weeks);
    }
    if (format == "m") {
        return Math.round(months);
    }
    if (format == "y") {
        return Math.round(years);
    }
}

完全に正確ではありませんが、非常に近いです。私はそれにいくつかのアドオンを追加して、日、週、月、年、または時間で計算することになりました。誰でもこのコードを自由にコピーして使用できます。

4

3 に答える 3

10

TimeSpanDatejsとオプションのtime.jsモジュールを使用している場合は、オブジェクトを作成することにより、次のコードで計算を実行できます。

// dd.mm.YYYY or d.m.YYYY
// dd.m.YYYY or d.mm.YYYY

var start = Date.parse("20.09.2011"); 
var end = Date.parse("28.09.2011");

var span = new TimeSpan(end - start);

span.days; // 8

もちろん、本当に簡潔にしたい場合は、上記を1行に簡略化することもできます。

new TimeSpan(Date.parse(end) - Date.parse(start)).days; // pass 'end' and 'start' as strings

お役に立てれば。

于 2011-09-21T06:01:50.170 に答える
2

日付が一般的な形式の文字列d/m / yまたはそのバリエーションである場合は、次を使用できます。

function toDate(s) {
  var s = s.split('/');
  return new Date(s[2], --s[1], s[0]);
}

提供されたデータの整合性にどれだけ自信があるかに応じて、入力を検証するかどうかを決定できます。

コメントに答えるために編集する

異なる区切り文字(ピリオド(。)やハイフン(-)など)を許可するために、分割する正規表現は次のようになります。

  var s = s.split(/[/\.-]/);

日付は、それぞれ日付、月、年の番号に分割されます。パーツはDateコンストラクターに渡され、その日付のローカル日付オブジェクトが作成されます。javascriptの月はゼロインデックス(1月は0、2月は1など)であるため、月番号を1つ減らす必要があり--s[1]ます。

/編集

2つの日付オブジェクトを比較するには(つまり、ミリ秒単位で差を取得するには)、一方を他方から減算するだけです。結果を日数で表示する場合は、1日とラウンドのミリ秒数で除算します(夏時間によるわずかな違いを考慮に入れるため)。

したがって、今日から日付までの日数を確認するには、次を使用します。

function diffToToday(s) {
  var today = new Date();
  today.setHours(0,0,0);
  return Math.round((toDate(s) - today) / 8.64e7);
}

alert(diffToToday('2/8/2011')); // -1
alert(diffToToday('2/8/2012')); // 365

PS。「フィンランド語」のデータ形式は、ISO形式の日付を使用しない、世界の大多数で使用されている形式です。

于 2011-08-03T08:53:57.013 に答える
0

Dateオブジェクトの使用:

var today = Date.today();
var dateToday = Date.parse(today.toString('MMMM d, yyyy'));

var prevMonthDate = dateToday.addDays(-30);

var difference = (dateToday - prevMonthDate)/86400000;

console.log(difference);   //will give you the difference in days. 
于 2013-04-03T07:13:41.780 に答える