10

我正在尝试比较两个芬兰时间形式的日期,如下所示: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>

此代码将尝试计算两个日期之间的差异,其中一个是今天。没有成功loz。

提前致谢!

我的最终代码(感谢 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

如果您使用的是 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

希望这可以帮助。

于 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 月份的索引为零(一月为 0,二月为 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 格式日期的数据格式。

于 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 回答