Javascript奇怪的日期操作

时间:2016-08-12 14:42:17

标签: javascript date

我在一个看似有信誉的消息来源中遇到了一个我不理解的奇怪日期操作。这是流行的UI框架的支持文档中的示例的一部分:

var startDate = start.value();  // returns Date object
startDate = new Date(startDate);
startDate.setDate(startDate.getDate());

现在逐行var startDate = start.value();这一行返回Date对象并将其保存在startDate变量中。好在这里,没问题。

然后我们创建具有相同值的新Date对象并将其分配回同一个变量(稍微令人困惑,但我可以忍受它)。

第三行是一个真正的谜题 - 我们得到一个月中的某一天(通过getDate)并将其指定为同一个变量中的月中某一天(通过setDate)。

现在的问题是:这是一个糟糕的代码,可能是未完成的重构遗留下来的吗?或者这是否真的有意义,它做了一些操作,如删除时间(看起来不像)?如果是,它会做什么?

UPD :代码示例在这里http://demos.telerik.com/kendo-ui/datepicker/rangeselection

2 个答案:

答案 0 :(得分:3)

源有多种格式,如果我们检查它们:

HTML5 / JavaScript的:

startDate.setDate(startDate.getDate());

asp.net:

startDate.setDate(startDate.getDate() + 1);

JSP:

startDate.setDate(startDate.getDate() + 1);

PHP:

startDate.setDate(startDate.getDate() + 1);

我们可以清楚地看到第一个(你链接到的)突出的地方应该是相同的。这将使人们相信这个问题是一个简单的错字。

答案 1 :(得分:2)

让我们一行一行:

startDate = new Date(startDate);

如果startDateDate

,则会返回相同的日期



var someDate = new Date(5555555113);
console.log(someDate);
startDate = new Date(someDate);
console.log(startDate);




但如果start.value()返回毫秒或字符串,则将其传递给new Date将确保使用这3种表示Date的方式中的任何一种,您将获得Date对象。



var someDate = 5555555113;
var startDate = new Date(someDate);
console.log(startDate);

someDate = "1970-03-06T07:12:35.113Z";
startDate = new Date(someDate);
console.log(startDate);




现在是下一行:

startDate.setDate(startDate.getDate());

这没有任何意义,因为它会返回相同的Date



var startDate = new Date();
console.log(startDate);
startDate.setDate(startDate.getDate())
console.log(startDate);