我有两个日期 YYYY-MM-DD
和 ZZZZ-NN-EE
如何计算它们之间的秒数?
我理解YYYY和ZZZZ是整数值,表示年份,MM和NN是整数值,表示年份的月份,DD和EE是整数值,表示每个月的日子。
var t1 = new Date(YYYY, MM, DD, 0, 0, 0, 0);
var t2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0);
var dif = t1.getTime() - t2.getTime();
var Seconds_from_T1_to_T2 = dif / 1000;
var Seconds_Between_Dates = Math.abs(Seconds_from_T1_to_T2);
一个方便的将来参考来源是MDN网站
或者,如果你的日期以javascript可以解析的格式出现
var dif = Date.parse(MM + " " + DD + ", " + YYYY) - Date.parse(NN + " " + EE + ", " + ZZZZ);
然后你可以将那个值用作毫秒差(在我的两个示例中,dif具有相同的含义)
yyyy
表示4位数年份,大写MM
表示2位数月份,小写dd
表示2位数日期。 - BalusCMath.round
可能是更好的选择。 - gphilipvar a = new Date();
alert("Wait a few seconds, then click OK");
var b = new Date();
var difference = (b - a) / 1000;
console.log("You waited: " + difference + " seconds");
a
和 b
的值,确保它们是日期类型。 - Sethnew Date() - new Date()
)和 @Martin 的答案(使用 new Date().getTime() - new Date().getTime()
)有什么区别? - krummensThe left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
。然而,@Martin 的答案在 TypeScript 中是有效的。 - krummensgetTime()
- 将 new Date()
隐式转换为数字可能是基于约定而非规范。我没有在 规范 中看到操作符的行为定义。对我来说,这表明行为是基于强制转换规则隐含的。我认为明确地(首先将其转换为毫秒,以便您知道正在减去的是毫秒)更清晰。如果一个非日期对象意外地发送到您的函数中,它也会立即捕获 @user3344977 提到的错误。 - Seth你可以简单地做到它。
var secondBetweenTwoDate = Math.abs((new Date().getTime() - oldDate.getTime()) / 1000);
var a = new Date("2010 jan 10"),
b = new Date("2010 jan 9");
alert(
a + "\n" +
b + "\n" +
"Difference: " + ((+a - +b) / 1000)
);
简单方式:
function diff_hours(dt2, dt1)
{
var diff =(dt2.getTime() - dt1.getTime()) / 1000;
diff /= (60 * 60);
return Math.abs(Math.round(diff));
}
function diff_minutes(dt2, dt1)
{
var diff =(dt2.getTime() - dt1.getTime()) / 1000;
diff /= (60);
return Math.abs(Math.round(diff));
}
function diff_seconds(dt2, dt1)
{
var diff =(dt2.getTime() - dt1.getTime()) / 1000;
return Math.abs(Math.round(diff));
}
function diff_miliseconds(dt2, dt1)
{
var diff =(dt2.getTime() - dt1.getTime());
return Math.abs(Math.round(diff));
}
dt1 = new Date(2014,10,2);
dt2 = new Date(2014,10,3);
console.log(diff_hours(dt1, dt2));
dt1 = new Date("October 13, 2014 08:11:00");
dt2 = new Date("October 14, 2014 11:13:00");
console.log(diff_hours(dt1, dt2));
console.log(diff_minutes(dt1, dt2));
console.log(diff_seconds(dt1, dt2));
console.log(diff_miliseconds(dt1, dt2));
function parseDate(str) {
const [dateStr, timeStr] = str.split(' ');
const [m,d,y] = dateStr.split('/');
const [h,min] = timeStr.split(':');
const date = new Date(y,m,d,h,min,0, 0);
return date;
}
const date1 = parseDate('28/6/2022 22:55');
const date2 = parseDate('28/6/2022 22:58');
const diffInSeconds = (date2 - date1) / 1000;
console.log(diffInSeconds)
bc <<< "$(date --date='1 week ago' +%s) - \
$(date --date='Sun, 29 Feb 2004 16:21:42 -0800' +%s)"
需要安装bc和gnu date。
.Net 提供了 TimeSpan 类来为您执行数学运算。
var time1 = new Date(YYYY, MM, DD, 0, 0, 0, 0)
var time2 = new Date(ZZZZ, NN, EE, 0, 0, 0, 0)
Dim ts As TimeSpan = time2.Subtract(time1)
ts.TotalSeconds
yyyy-MM-dd
很清楚(年,月,日 - 注意它们不是全部大写),但 ZZZZ-NN-EE 不太清楚。我将其解释为(时区,???,星期几)。这是一年中的第几周吗?如果是,那应该是ww
。但即使是这样,我们仍然需要年份来计算差异。您能否提供一些实际样本值? - BalusC