簡體   English   中英

使用javascript或datejs比較兩個日期(日期差異)

[英]Comparing two dates with javascript or datejs (date difference)

我試圖比較芬蘭時間形式的兩個日期:dd.mm.YYYY或dmYYYY或dd.m.YYYY或d.mm.YYYY。

我很難找到如何做到這一點,我目前的代碼將無法正常工作。

<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>

此代碼將嘗試計算兩個日期之間的差異,其中一個日期為今天。 沒有成功lolz。

提前致謝!

我的最終代碼(謝謝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);
    }
}

它不完全准確,但非常接近。 我最后添加一些插件來計算每周的一個月或一小時,任何人都可以自由復制和使用此代碼。

如果您使用Datejs和可選的time.js模塊,則可以通過創建TimeSpan對象使用以下代碼運行計算:

// 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

當然,如果你真的想要額外的簡潔,上面的內容可以簡化為一行。

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

希望這可以幫助。

如果您的日期是常見形式的字符串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]

/編輯

要比較兩個日期對象(即獲得以毫秒為單位的差異),只需從另一個中減去一個。 如果您希望以天為單位的結果,則除以一天和一天的毫秒數(以允許由夏令時引起的任何微小差異)。

因此,如果您想查看今天和日期之間的天數,請使用:

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格式日期的格式。

使用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. 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM