【问题标题】:How to get total minutes of difference between two dates using pure JavaScript如何使用纯 JavaScript 获取两个日期之间的总分钟数差异
【发布时间】:2016-10-18 05:35:24
【问题描述】:

更新了我的问题

如何使用纯 JavaScript 获取两个日期之间的总分钟差

条件(1)::同月同年,但日期变化

newDate: 18/10/2016 0:50
oldDate: 17/10/2016 23:05

条件(2)::当月最后一天和下个月第一天

newDate: 1/11/2016 0:50  
oldDate: 31/10/2016 23:05

条件(3):: 一年的最后一天和新年的第一天

newDate: 1/1/2017 0:50  
oldDate: 31/12/2016 23:05

注意:请查看 newDate 和 oldDate 以了解条件。

谢谢

【问题讨论】:

标签: javascript date


【解决方案1】:

由于您不想使用库来解析日期字符串,因此可以编写一个简单的函数,例如:

// Parse date string in "Sat Dec 31 2016 15:35:57 GMT+0530 (India Standard Time)" format
function parseDate(s) {
  // Split into tokens
  var b = s.match(/\w+/g) || [];
  var months = 'jan feb mar apr may jun jul aug sep oct nov dec'.split(' ');
  // Determine offset in minutes
  var offSign = /GMT+/.test(s)? -1 : 1;
  var offset = b[8].substr(0,2)*60 + +b[8].substr(2,2);
  // Create date, applying offset to minutes
  var date = new Date(Date.UTC(b[3],
             months.indexOf(b[1].toLowerCase()), 
             b[2], 
             b[4],
             +b[5] + (offSign*offset),
             b[6]));
  return date;
}

var d = parseDate("Sat Dec 31 2016 15:35:57 GMT+0530 (India Standard Time)")
console.log('UTC: ' + d.toISOString() + '\n' +
            'Local: ' + d.toLocaleString());

【讨论】:

  • 太棒了!!!现在你能解释一下我如何通过将新日期减去旧日期来获得总时间差吗?
  • 您可以通过简单地从另一个日期中减去一个日期来获得两个日期之间的差异(以毫秒为单位),例如一日:new Date(2016,0,2) - new Date(2016,0,1),有many questions about that already。 ;-)
  • 这好多了,我没有在我的项目中尝试过你的代码,但我感谢你的回答和回复。
【解决方案2】:

使用以下纯 JavaScript 代码完成了我的要求

在我的代码中开始时间和结束时间是

//var startTime = localStorage.getItem("starttime");
//var endTime = new Date();

此处示例。

var startTime = new Date("Sat Dec 31 2016 15:35:57 GMT+0530 (India Standard Time)");
var endTime = new Date("Sun Jan 1 2017 15:35:57 GMT+0530 (India Standard Time)");

var totalMiliseconds = endTime - startTime;
alert(totalMiliseconds);
//output:: 86400000

var totalSeconds = totalMiliseconds/1000;
alert(totalSeconds);
//output:: 86400

var totalMinuts = totalSeconds/60;
alert(totalMinuts);
//output:: 1440

var totalHours = totalMinuts/60;
alert(totalHours);
//output:: 24

这满足了我的所有三个条件。

感谢您的支持!!!

【讨论】:

  • 不要使用 Date 构造函数解析字符串(或 Date.parse,它们与解析等效)。始终使用解析函数或库。
  • 我已将开始时间和日期存储到本地存储中,因此在重用同一日期时,我需要使用日期构造函数对其进行解析。
  • 您不需要需要使用 Date 构造函数,它是一个糟糕的解析选择。使用简单的解析函数或众多优秀的解析和格式化库之一,例如 fecha.jsmoment.js
  • 但正如我之前提到的,我已经添加了许多 js 库,例如 scrollbox.js touchswipe.js 和其他,所以不想再添加一个。谢谢顺便说一句@RobG
  • 如果你不想使用库(fecha.js 只有 2k),写一个简单的函数来解析你的特定格式。
猜你喜欢
  • 1970-01-01
  • 2014-01-17
  • 2016-02-11
  • 2012-11-28
  • 2020-03-22
  • 2017-03-27
  • 1970-01-01
  • 2018-11-08
相关资源
最近更新 更多