如何在JavaScript中比较两种不同的日期格式和不同的时区
How can I compare two different date formats and different time zones in JavaScript?
我想比较两个以不同格式和时区给出的不同时间对象。
结构化英语输入:
IF "Mon Sep 15 2014 18:20:52 GMT+0200 (CEST)" is greater than "2014-09-04T13:57:33.338Z"
预期输出:
True
如何在JavaScript中实现这一点?
本机JavaScript
您可以使用Date.parse(dateObject)
将日期转换为Unix时间戳并对其进行测试。您可以查看有关它的文档。
使用附加库
你也可以使用一个外部库,比如Moment.js。这个库允许你比较你的日期,而无需将它们转换为时间戳或其他外部格式。
你只需要得到你的日期,并将其与另一个日期进行比较:
moment("Mon Sep 15 2014 18:20:52 GMT+0200 (CEST)").isAfter('2014-09-04T13:57:33.338');
如果你愿意的话,我让你自己探索这个美妙的图书馆。
Moment网站:http://momentjs.com/
希望这两个解决方案能帮助您:)
在JavaScript中,使用Date.parse(myDateObject)
将不同的日期格式转换为Unix时间戳(尽管最后3位数字不是Unix时间戳的一部分,而是毫秒)。
例如:
if (Date.parse("Mon Sep 15 2014 18:20:52 GMT+0200 (CEST)") > Date.parse("2014-09-04T13:57:33.338Z")) {}; // evaluates to true
不要期望Date对象正确或一致地解析日期和时间字符串。如果您有许多不同的格式需要支持,那么有许多库可以提供帮助,但如果您只有一个或两个,那么支持它们并不困难。
要解析UTC ISO 8601格式字符串,如"2014-09-04T13:57:33.338Z":
function parseISOUTC(s) {
// Get the parts
var b = s.split(/'D+/);
// Return a new Date
return new Date(Date.UTC(b[0], --b[1], b[2], b[3], b[4], b[5], b[6]));
}
要解析像"2014年9月15日星期一18:20:52 GMT+0200(CEST)"这样的字符串需要更多的工作:
function parseMDYHMSO(s) {
// Get the parts
var b = s.split(/[ :]/);
// Convert the month name to a number
var months = {jan:0,feb:1,mar:2,apr:3,may:4,jun:5,
jul:6,aug:7,sep:8,oct:9,nov:10,dec:11};
var month = months[b[1].toLowerCase()];
// Get the offset
var sign = s.indexOf('+') == -1? 1 : -1;
var offset = b[7].substr(4,2) * 60;
offset += +b[7].substr(6,2);
// Create a new Date
return new Date(Date.UTC(b[3], month, b[2], b[4], +b[5] + sign*offset, b[6]));
}
现在你有两个约会对象。如果你只想比较时间部分,那么得到每个时间部分的小时、分钟和秒,并进行比较:
var d0 = parseISOUTC('2014-09-04T13:57:33.338Z');
// 2014-09-15T16:20:52.000Z
var d1 = parseMDYHMSO('Mon Sep 15 2014 18:20:52 GMT+0200 (CEST)');
d0.getUTCHour(); // 13
d1.getUTCHour(); // 16
d0.getUTCMin(); // 57
d1.getUTCMin(); // 20
d0.getUTCMin(); // 33
d1.getUTCMin(); // 52
您也可以只使用普通的getHour、getMinute等方法,但UTC方法清楚地表明您使用的是相同的偏移量。
您也可以只使用带偏移量的时间部分来执行上述操作,而忽略日期。将小时、分钟和秒转换为秒,应用偏移量,允许日边界并比较结果。
- Javascript日期格式类似于ISO,但本地
- NodeJS日期格式不起作用
- 将客户端特定的日期格式返回到服务器MVC4
- ui网格日期单元格过滤器,过滤日期格式导致显示错误的日期
- 将Javascript日期转换为ASP.NET日期格式
- 在达到状态之前在Redux Reducer中设置日期格式
- 如何从Angularjs中的新日期获取日期格式
- 如何使用jquery更改为所需的日期格式
- keith wood日期选择器日期格式和语言
- Dygraph更改日期格式
- 确定Twig(或JavaScript)中的国际日期格式,以便在其他地方使用
- javascript和jquery日期格式转换
- 用javascript将日期格式从d/m/yyyy转换为yyyy-mm-dd
- 在Datepicker中将日期格式更改为yyyy-mm-dd
- 在Karma Jasmine单元测试用例中检查日期格式
- 使用不同的日期格式和区域设置创建时刻
- 更改日期选择器上的日期格式
- 以日期计算的天数更改日期格式
- 带有onchange的日期格式
- 如何从区域设置获取日期格式