我可以用时间来区分两次约会。js或普通js。
马上。js
var a = moment(timestamp1);
var b = moment(timestamp2);
var month =a.diff(b, 'month');
var day =a.diff(b, 'day') - month;
var year =a.diff(b, 'hours');
月返回月,天返回日差。但我想知道答案
MM DD hh格式,例如2个月12天5小时。我不能直接转换日期,因为还有其他问题,比如闰年。那么,还有别的办法全力以赴地计算一切吗?如果这对我有帮助的话,我是在做这件事
您无法将差异(diff result是一个数字)转换为MM DD hh格式,因为有些月份的长度为30天,而其他月份的长度为31天。
它可以从开始和结束日期时间计算。
有一个类似的函数,你正在寻找,但不确切
moment("2010-01-01").from("2010-12-01")
结果:一年前
moment("2010-01-01").from("2010-12-01", true)
结果:一年
var date1 = new Date("4/14/2016");
var date2 = new Date("10/16/2016");
var timeDiff = Math.abs(date2.getTime() - date1.getTime());
var newDate = new Date(timeDiff);
alert(newDate);
alert("Month " + (newDate.getUTCMonth() + 1));
alert("Date " + newDate.getUTCDate());
alert("Hour " + newDate.getUTCHours());
要得到两个日期之间的精确差异并不简单,因为年、月和日有不同的长度。此外,加法不一定与减法对称,例如4月30日加一个月是5月30日,但5月31日加一个月是6月30日还是7月1日?类似于2月29日加或减1年。
下面尝试处理这些问题,这样,如果添加一个月的时间超过了一个月,那么该日期将返回到上个月的最后一天。希望这些评论足够,如果没有,请澄清。
dateDiff函数返回年、月、日等值的数组。要获取MM-DD-hh,只需获取并以您想要的任何方式格式化它。我包含了一个小格式化函数,它只是打印出非零组件。
// Simple calculation of days between two dates based on time value
function getDaysDiff(start, end) {
return ((parseStringUTC(end) - parseStringUTC(start))/8.64e7).toFixed(2);
}
// Expects input in ISO8601 format: yyyy-mm-ddThh:mm:ss.sssZ
// Always expects UTC
function parseStringUTC(s) {
s = s.split(/\D/);
s[6] = s[6]? ('0.'+ s[6]) * 1000 : 0;
return new Date(Date.UTC(s[0],--s[1],s[2],s[3]||0,s[4]||0,s[5]||0,s[6]||0));
}
/* Get the difference between two dates in years, months, days,
** hours, minutes and seconds.
**
** Difference is values to add to earlier date to reach later date.
**
** Does not consider daylight saving changes so may be incorrect by offset
** difference over daylight saving boundaries, so use UTC values (pass
** values as date.toISOString() or format like ISO 8601 UTC)
**
** @param {string} d0 - earlier date in format y-m-d h:m:s, can also be
** yyyy-mm-ddThh:mm:ssZ, the timezone offset is ignored
** the string is not validated
** @param {string} d1 - later date in same format as above. If d1 is earlier
** than d0, results are unreliable.
** @returns {Array} values for years, months, days, hours, minutes and
** seconds (milliseconds as decimal part of seconds)
*/
function dateDiff(d0,d1) {
var s = d0.split(/\D/);
var e = d1.split(/\D/);
// Calculate initial values for components,
// Time component is optional, missing values treated as zero
var ms = (e[6]||0) - (s[6]||0);
var sec = (e[5]||0) - (s[5]||0);
var min = (e[4]||0) - (s[4]||0);
var hr = (e[3]||0) - (s[3]||0);
var day = e[2] - s[2];
var mon = e[1] - s[1];
var yr = e[0] - s[0];
// Borrowing to resolve -ve values.
if (ms < 0) { // ms borrow from sec
ms += 1000;
--sec;
}
if (sec < 0) { // sec borrows from min
sec += 60;
--min;
}
if (min < 0) { // min borrows from hr
min += 60;
--hr;
}
if (hr < 0) { // hr borrows from day
hr += 24;
--day;
}
// Day borrows from month, a little complex but not too hard
if (day < 0) {
var prevMonLen = new Date(e[0], e[1]-1, 0).getDate();
// If the start date is less than the number of days in the previous month,
// set days to previous month length + current diff days value
// Note that current diff days may have had a day borrowed, so don't use end date - start date
// Otherwise, if the start date is equal to or greater than the number of
// days in the previous month, just set to end date. That's because adding
// 1 month to 30 Jan should be last day in Feb (i.e. 28 or 29), not 2 or 1 March
// respectively, which is what happens if adding 1 month to a Date object for 30 Jan.
// Similarly, 31 May + 1 month should be 30 June, not 1 July.
day = s[2] < prevMonLen? prevMonLen + day : +e[2];
--mon;
}
if (mon < 0) { // mon borrows from yr
mon += 12;
--yr;
}
// If days >= number of days in end month and end date is last day
// of month, zero mon and add one to month
// If then months = 12, zero and add one to years
var endMonLen = new Date(e[0], e[1], 0).getDate();
if (day >= endMonLen && s[2] > e[2] && e[2] == endMonLen) {
day = 0;
++mon;
if (mon == 12) {
mon = 0;
++yr;
}
}
return [yr,mon,day,hr,min,+(sec + '.' + ('00'+ms).slice(-3))];
}
/* Format output from dateDiff function, e.g. 3years, 2 days, 23.12 seconds
**
** @param {Array} v - values array in order years, months, days, hours, minutes
** seconds (milliseconds as decimal part of seconds)
** @returns {string} Values with their names appended. Adds "s" to values other
** than 1, zero values omitted, e.g. "0 months" not returned.
*/
function formatOutput(v) {
var values = ['year','month','day','hour','minute','second']
return v.reduce(function (s, x, i) {
s += x? (s.length? ' ' : '') +
(i == 5? x.toFixed(3) : x) + ' ' + values[i] + (x==1?'':'s'):'';
return s;
}, '');
}
// Tests, focus on February
var dates = [
['2016-01-31','2016-03-01'], // 1 month 1 day - 31 Jan + 1 month = 29 Feb
['2016-01-29','2016-03-01'], // 1 month 1 day - 29 Jan + 1 month = 29 Feb
['2016-01-27','2016-03-01'], // 1 month 3 days - 27 Jan + 1 month = 27 Feb
['2016-01-27','2016-03-29'], // 2 months 2 days - 27 Jan + 2 month = 27 Mar
['2016-01-29','2016-03-27'], // 1 month 27 days - 29 Jan + 1 month = 29 Feb
['2015-12-31','2016-01-30'], // 30 days - 31 Dec + 30 days = 30 Jan
['2015-12-27','2016-01-30'], // 1 month 3 days - 27 Dec + 1 month = 27 Jan
['2016-02-29','2017-02-28'], // 1 year could also be 11 months 30 days
// since 29 Feb + 11 months = 28 Feb, but 28 Feb is last day of month
// so roll over to full year
// Both work, but 1 year is more logical
['1957-12-04','2016-02-20'], // 58 years 2 months 16 days
['2000-02-29','2016-02-28'], // 15 years 11 months 30 days
// Not full year as Feb 2016 has 29 days
['2000-02-28','2016-02-28'], // 16 years
['2000-02-28','2016-02-29'], // 16 years 1 day
['2016-02-28T23:52:19.212Z','2016-12-02T01:48:57.102Z'] // 9 months 3 days 1 hour 56 minutes 37.899 seconds
];
var arr = [];
dates.forEach(function(a) {
arr.push(a[0] + ' to ' + a[1] + '<br>' + formatOutput(dateDiff(a[0], a[1])));
});
document.write(arr.join('<br>'));
table {
border-collapse:collapse;
border-left: 1px solid #bbbbbb;
border-top: 1px solid #bbbbbb;
}
input {
width: 12em;
}
input.bigGuy {
width: 32em;
}
td {
border-right: 1px solid #bbbbbb;
border-bottom: 1px solid #bbbbbb;
}
td:nth-child(1) { text-align: right; }
<form onsubmit="this.doCalc.onclick(); return false;">
<table>
<tr>
<td width="250"><label for="startDate">Start date (yyyy-mm-dd)</label>
<td><input name="startDate" id="startDate" value="2012-08-09T22:15:03.22" size="25">
<tr>
<td><label for="endDate">End date (yyyy-mm-dd)</label>
<td><input name="endDate" id="endDate" value="2013-08-13T12:10:03.22" size="25">
<tr>
<td><label for="dateDifference">Date difference: </label>
<td><input name="dateDifference" readonly class="bigGuy">
<tr>
<td><label for="daysDifference">Days difference: </label>
<td><input name="daysDifference" readonly>
<tr>
<td>
<input type="button" value="Calc date difference" name="doCalc2" onclick="
this.form.dateDifference.value = formatOutput(dateDiff(this.form.startDate.value, this.form.endDate.value));
this.form.daysDifference.value = getDaysDiff(this.form.startDate.value, this.form.endDate.value) + ' days';
">
<td><input type="reset">
</table>
</form>
问题内容: 我可以使用moment.js或纯js获得两个日期之间的差异。 在moment.js中 一个月返回一个月,多个天返回以天为单位的差异。但是我想要答案 MM-DD-hh格式例如2个月12天5小时。我不能直接转换日期,因为还有leap年等其他问题。还有什么其他办法可以全力以赴并计算一切吗?我在angular js中这样做,如果有帮助 问题答案: 要获得两个日期之间的精确差并不容易,因为年,月
嗯,我在这里发现了很多这样的问题,试图获得年、月和日的两个日期之间的差异。。。但没有满足我要求的答案。 所以我写了一些计算的东西,它似乎是有效的,但也许这里的一些专家可以进行更正,或者帮助使这更简单。
本文向大家介绍如何获取iOS中两个日期之间的差异?,包括了如何获取iOS中两个日期之间的差异?的使用技巧和注意事项,需要的朋友参考一下 获得两个日期之间的差异很容易。您应该知道如何在两个日期之间玩。 我们将使用DateFormatter类格式化日期。 DateFormatter的实例创建 NSDate对象的字符串表示形式,并将日期和时间的文本表示形式转换为 NSDate对象。 你可以在这里读更多关
本文向大家介绍java如何获取两个日期的时间差,包括了java如何获取两个日期的时间差的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java如何获取两个日期的时间差,供大家参考,具体内容如下 rainBeginTime是从本地数据库获取的时间,格式为”yyyy-MM-ddTHH:mm:ss“。 主要逻辑: 其中MyDateUtil.java: 更多关于java时间操作的文章,请点击
问题内容: 我知道我可以使用momentjs做任何事情,还可以做一些涉及日期的事情。但是令人尴尬的是,我很难去做一件看起来很简单的事情:得到两次之间的差。 例: 我试过的 我不知道那里的“ 10”是什么。我住在巴西,所以如果相关的话,我们是utc-0300。 结果是持续时间正确的内部值: 所以,我想我的问题是:如何将momentjs持续时间转换为时间间隔?我肯定可以用 但我觉得有一些更 优雅 ,我
问题内容: 我正在尝试以HTTP 1.1中指定的格式获取Java中日期的字符串。据我所知,这是: 1999年12月31日,星期五,格林尼治标准时间23:59:59 时间一直在格林尼治标准时间。 从Date / Calendar /获取此信息的最简单方法是什么? 问题答案: 如果有人试图在这里找到答案(就像我一样),这就是解决问题的方法: 以便将服务器设置为说英语,并在GMT时区指定时间。