我有一个脚本,它将两个日期相互比较。但两者都有所不同。一个我转换为字符串格式Mo /天/年然后转换为日期格式。另一个是直接用于已经采用日期格式的谷歌电子表格单元格。但是当我对它们进行比较时,即使日期在比较范围内也不起作用。这是我的代码:
function formatDate(someDate){
var x = someDate.split("T");
var v = x[0].split("-");
var newDate = new Date();
newDate.setFullYear(v[0],(v[1]-1),v[2]);
//var newDate = v[1]+"/"+ v[2]+"/"+v[0];
return newDate;
}
//calling formatDate within another function
if(startDate != ''){
if(singleCard[j].date != undefined){
var k = singleCard[j].date;
var f = formatDate(k);
var dt = new Date(f);
if(dt >= startDate && dt <= endDate){ //date comparison
//do something here
}
开始/结束日期的格式为:
Fri Oct 12 2012 00:00:00 GMT-0700 (PDT)
singleCard [j]。日期以字符串形式出现:
"2012-10-12T16:57:51.517Z"
然后我用:
var f = formatDate(date) -> var dt = new Date(f)
处理它。
我不确定我在这里做错了什么。感谢。
答案 0 :(得分:0)
当你这样做时
var newDate = v[1]+"/"+ v[2]+"/"+v[0];
您确定按正确的顺序使用了年/月/日吗?
您是否尝试记录var dt = new Date(f);
的结果以将其值视为日期对象?
抱歉,如果我的问题显而易见,但由于我不知道您当地的日期设置,我无法确定您是如何处理的。(我所在的国家/地区使用的是dd / mm / yyyy所以我以前常常遇到问题;)
编辑:刚刚看到您的评论......不应该是v[0]+"/"+ v[1]+"/"+v[2]
(yyyy / mm / dd)
编辑2 :我认为你在使用setFullYear()时也必须提供hh mm ss参数;
类似
newDate.setFullYear(v[0],(v[1]-1),v[2],0,0,0,0);
为了让它运转起来。由于你正在使用<=
和>=
比较,因此将hh mm ss和mSec设置为0也是必要的(即使是强制性的),如果你让小时数,则Equality可能永远不会成立,分钟,秒和毫秒可以自由地生活。
不要忘记日期对象总是随着时间的推移完成日期,即使您没有显示/使用它们。