Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript或datejs比较两个日期(日期差异)_Javascript_Date_Time_Datejs - Fatal编程技术网

使用javascript或datejs比较两个日期(日期差异)

使用javascript或datejs比较两个日期(日期差异),javascript,date,time,datejs,Javascript,Date,Time,Datejs,我试图比较两个芬兰时间形式的日期,如dd.mm.yyy或d.m.yyy或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

我试图比较两个芬兰时间形式的日期,如dd.mm.yyy或d.m.yyy或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>

它不是完全准确,但非常接近。最后,我添加了一些插件来计算日、周、月、年或小时,任何人都可以自由复制和使用此代码。

如果您的日期是d/m/y格式的字符串或其变体,您可以使用:

function toDate(s) {
  var s = s.split('/');
  return new Date(s[2], --s[1], s[0]);
}
您可能希望验证输入,或者不验证输入,这取决于您对所提供数据的一致性的信心程度

编辑以回答评论 要允许使用不同的分隔符(例如句点(.)或连字符(-),要拆分的正则表达式可以是:

  var s = s.split(/[/\.-]/);
日期将分别分为日期、月份和年份。这些部分将传递给日期构造函数,以创建该日期的本地日期对象。由于javascript月份的索引为零(一月为0,二月为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

注:“Finnish”数据格式是世界上绝大多数不使用ISO格式日期的数据格式。

如果您使用Datejs和可选的time.js模块,您可以通过创建
TimeSpan
对象,使用以下代码运行计算:

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. 
示例

// 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
当然,如果你真的想更简洁的话,上面的内容可以简化为一行

示例

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

希望这有帮助。

使用
日期对象:

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. 

相关的:相关的,但是试着把1990年3月13日到2011年8月3日这段时间放在一起……这就是为什么我把它放在相关的位置,而不是重复的位置。加油!请使用英文变量名和函数名好吗?@Akke names描述变量代表什么,如果我们不理解这些名称,就很难读懂您的代码。我想我应该将/替换为。当我希望它采用以下格式之一时:dd.mm.YYYY d.mm.YYYY dd.m.YYYY d.m。YYYY@RobG,请小心,我不知道什么是芬兰语日期格式,但在javascript中,像这样的日期解析为月/日/年,而不是日/月/年。我一直称之为美国日期格式;)@阿克,这里没地方猜,你自己试试吧。你会得到一个无效的日期。哦,你能澄清一下
s[2],--s[1],s[0]
代表什么吗?@shabunc-没有解析,日期被分成几个部分并作为单独的组件传递给日期构造函数。令人烦恼的是,对于2011年8月3日的日期,您可以使用美国格式
新日期('8/3/2011')
或ISO和偶尔使用的欧洲格式
新日期('2011/8/3')
,但不能使用全球最常用的格式,即“3/8/2011”