2016-08-12 92 views
7

我遇到了一個看似有聲望的來源奇怪的日期操縱,我不明白。這是在用於流行UI框架支持文檔樣本的一部分:Javascript奇怪的日期操作

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

+1

這是針對特定瀏覽器的遺留代碼嗎?除了這個選項,我想不出有任何可能的原因來做到這一點。 – Nit

+0

@Nit代碼示例 - 與傳統或瀏覽器無關 – trailmax

+0

看來(至少在Chrome控制檯中運行它時)會創建多個新的日期對象。如果沒有特定的目的,那麼這個代碼實際上效率很低。 –

回答

3

來源是多種格式,如果我們考察他們都:

HTML5/JavaScript的:

startDate.setDate(startDate.getDate()); 

ASP。網:

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

的jsp:

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

PHP:

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

我們可以清楚地看到第一個(你一個鏈接)中脫穎而出,他們應該是相同的。這將導致人們相信這個問題是一個簡單的錯字。

+0

好的,最後一行沒有魔法。唷! – trailmax

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);

+0

關於從字符串或毫秒轉換的好處! – trailmax