2016-11-18 68 views
0

我有一點點的JavaScript,獲取不同的日期範圍並格式化它們以返回yyyymmdd。我得到了我需要的最終結果,但是有兩個不同的變量讓我感到困惑,並且讓我覺得我沒有這樣做是最好的方式。我想知道是否有辦法通過新日期和額外刪除 - 全部在一行中。結合日期格式化變量和函數(jQuery/Javascript)

我的功能是:

function toJSONLocalMonth (firstDay, lastDay) {//set default date range to from beggining of this month 
    var local = new Date(firstDay); 
    local.setMinutes(firstDay.getMinutes() - firstDay.getTimezoneOffset()); 
    return local.toJSON().slice(0, 10); 

    var local = new Date(lastDay); 
    local.setMinutes(lastDay.getMinutes() - lastDay.getTimezoneOffset()); 
    return local.toJSON().slice(0, 10); 
} 

每當我需要的結果我做到這一點:)比如今天和昨天)

var dateToday = new Date(); 
dateTodayFormat = toJSONLocalMonth(dateToday).replace(/-/g, "");//format date yyyymmdd 
dateYesterday = dateToday.setDate(dateToday.getDate() - 1); 
dateYesterdayFormat = toJSONLocalMonth(dateToday).replace(/-/g, ""); 

如果有更好的方法來得到這樣的結果,或至少將dateYesterdaydateYesterdayFormat合併爲一行即可獲得yyymmdd。

(我需要保持 - 在函數結果,所以我不能有過濾。)

謝謝!

回答

1

你的問題還不清楚。

toJSONLocalMonth只會返回一個值,從第一語句之一。第二個是永遠不會到達的。

dateToday.setDate(...)的返回值是一個時間值(數字),而不是日期,因此您無法將字符串方法鏈接到它。它會修改日期本身,以便dateYesterday是多餘的,即

dateYesterday = dateToday.setDate(dateToday.getDate() - 1); 
dateYesterdayFormat = toJSONLocalMonth(dateToday).replace(/-/g, ""); 

可以是:

dateToday.setDate(dateToday.getDate() - 1); 
var dateYesterdayFormat = toJSONLocalMonth(dateToday).replace(/-/g, ""); 

toJSONLocalMonth似乎剛開格式爲YYYYMMDD日期字符串。我想你應該避開內置的方法,因爲它們使用的是UTC/GMT而不是本地時區。下面的函數,在一個更明顯的方式:

/* Return an ISO 8601 formatted date string 
 
** @param {Date} d - date to create string for 
 
** @returns {string} string formatted as ISO 8601 without timezone 
 
*/ 
 
function toISOStringLocal(d) { 
 
    function z(n){return (n<10?'0':'') + n} 
 
    return d.getFullYear() + '-' + z(d.getMonth()+1) + '-' + 
 
     z(d.getDate()) + 'T' + z(d.getHours()) + ':' + 
 
     z(d.getMinutes()) + ':' + z(d.getSeconds()) 
 
      
 
} 
 

 
console.log(toISOStringLocal(new Date));

您也可以考慮像fecha.js小格式的圖書館,你會怎麼做:

var dateToday = new Date(); 
var dateTodayFormat = fecha.format(dateToday, 'YYYYMMDD') 
dateToday.setDate(dateToday.getDate() - 1); 
var dateYesterdayFormat = fecha.format(dateToday, 'YYYYMMDD'); 

最後兩線可以成爲一個使用:

var dateYesterdayFormat = fecha.format(new Date(dateToday.setDate(dateToday.getDate() - 1)), 'YYYYMMDD'); 

但我不會推薦。

另見:Where can I find documentation on formatting a date in JavaScript?

+0

很抱歉,如果我的問題不是很清楚,但你已經幫了我不少優化該功能,並瞭解它是如何工作的,而不是依靠「神奇」的:)謝謝! –