[英]jQuery/JS - How to compare two date/time stamps?
I have two date/time stamps: 我有两个日期/时间戳:
d1 = 2011-03-02T15:30:18-08:00
d2 = 2011-03-02T15:36:05-08:00
I want to be above to compare the two: 我想在上面比较两者:
if (new Date(d1) < new Date(d2)) {alert('newer')}
But that does not appear to be working correctly. 但这似乎没有正常工作。 Is there a way to compare not just the dates but the times as well.? 有没有办法比较日期和时间。? thanks 谢谢
UPDATE: 更新:
console.log(d1 + ' ' + d2);
console.log(new Date(d1) > new Date(d2))
2011-03-02T15:30:18-08:00 2011-03-02T15:36:05-08:00
false
2011-03-02T15:30:18-08:00 2011-03-02T15:30:18-08:00
false
2011-03-02T15:30:18-08:00 2011-03-02T14:15:04-08:00
false
Your timestamps should be strings. 你的时间戳应该是字符串。
var d1 = "2011-03-02T15:30:18-08:00";
var d2 = "2011-03-02T15:36:05-08:00";
if (new Date(d1) < new Date(d2)) {alert('newer')}
Example: http://jsfiddle.net/hKPkF/ 示例: http : //jsfiddle.net/hKPkF/
You may be having trouble with the date string format. 您可能在使用日期字符串格式时遇到问题。 I am getting Invalid date if I do: 如果我这样做,我将收到无效日期:
new Date("2011-03-02T15:30:18-08:00");
Here's what works for me on Chrome: 这对我在Chrome上有用:
var d1 = "Thu Mar 03 2011 00:53:54 GMT+0100 (CET)";
var d2 = "Thu Mar 03 2011 03:53:54 GMT+0100 (CET)";
if (new Date(d1) < new Date(d2)) {console.log('newer')}
If you are working in ruby on the server side, you could convert to UTC from a Time
object. 如果您在服务器端使用ruby,则可以从Time
对象转换为UTC。 Here it is, with a little massaging to convert to a format that is identical to javascript's Date object toUTCString
method: 在这里,通过一些按摩来转换为与javascript的Date对象toUTCString
方法相同的格式:
tm = Time.new
utc_tm = tm.getutc
utc_tm.strftime("%a, %d %b %Y %H:%M:%S GMT")
Output: "Thu, 03 Mar 2011 00:46:55 GMT"
输出: "Thu, 03 Mar 2011 00:46:55 GMT"
Seems to work fine for me, although you have to format correctly (ie semicolons, quotes): 虽然你必须正确格式化(即分号,引号),似乎对我工作正常:
var d1 = "2011-03-02T15:30:18-08:00";
var d2 = "2011-03-02T15:36:05-08:00";
if(new Date(d1) < new Date(d2)) {alert('newer')};
And yes, it takes time into account. 是的,需要时间考虑。 If you do this: 如果你这样做:
alert(new Date(d1) - new Date(d2));
You get 347000, which is 347 seconds, or 5 minutes, 47 seconds. 你得到347000,这是347秒,或5分47秒。 This is the correct difference between the two. 这是两者之间的正确差异。
var d1= '2011-03-02T15:30:18-08:00', d2= '2011-03-02T15:36:05-08:00'; var d1 ='2011-03-02T15:30:18-08:00',d2 ='2011-03-02T15:36:05-08:00'; Some browsers can convert an ISO string to a Date, with new Date or Date.parse. 某些浏览器可以使用新的Date或Date.parse将ISO字符串转换为Date。
A lot of browsers in use today cannot-you may need to write your own conversion. 今天使用的很多浏览器都不能 - 您可能需要编写自己的转换。
This one seems to work, but it'll need refining. 这个似乎有用,但它需要精炼。 I added a shim for browsers that don't have an array.map, based on mozilla org's public code. 我为没有array.map的浏览器添加了一个垫片,基于mozilla org的公共代码。
Date.fromISO= function(s){
var day, tz,
rx= /^(\d{4}\-\d\d\-\d\d([tT][\d:\.]*)?)([zZ]|([+\-])(\d\d):(\d\d))?$/,
p= rx.exec(s) || [];
if(p[1]){
day= p[1].split(/\D/).map(function(itm){
return parseInt(itm, 10) || 0;
});
day[1]-= 1;
day= new Date(Date.UTC.apply(Date, day));
if(!day.getDate()) return NaN;
if(p[5]){
tz= parseInt(p[5], 10)*60;
if(p[6]) tz += parseInt(p[6], 10);
if(p[4]== "+") tz*= -1;
if(tz) day.setUTCMinutes(day.getUTCMinutes()+ tz);
}
return day;
}
return NaN;
}
Array.prototype.map= Array.prototype.map || function(fun, scope){
var L= this.length, A= [], i= 0;
if(typeof fun== 'function'){
while(i< L){
if(i in this) A[i]= fun.call(scope, this[i], i, this);
++i;
}
return A;
}
}
var d1= '2011-03-02T15:30:18-08:00', d2= '2011-03-02T15:36:05-08:00';
alert(Date.fromISO(d1)-Date.fromISO(d2)+' milliseconds')
Given the differences in date formats and capability between browsers, I'd really reccomend you use a library devoted to DateTime handling. 鉴于浏览器之间的日期格式和功能的差异,我真的建议您使用专门用于DateTime处理的库。 JS support for it is notoriously horrendous. JS对它的支持是众所周知的骇人听闻的。 I'm a HUGE fan of date.js 我是date.js的巨大粉丝
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.