2011-03-31 167 views
24

如何在我的文本框中顯示昨天的日期和昨天的日期,並同時顯示今天的日期?用於展示昨天的日期和今天的日期的代碼

我有這個home.php我昨天顯示的日期(用戶不能修改此只讀)和今天的日期(用戶必須輸入日期今天)。當明天來臨並且用戶訪問家庭時,他/她將看到昨天輸入的日期,並且將爲romorrow再次輸入日期。

EG:第一天(2011年3月30日) 昨天的日期:3月29日,2011年(不可編輯文本) 進入今天日期:(我鍵入..)3月30日,2011年

日2(2011年3月31日) 昨天發佈日期:2011年3月30日。(不可編輯文本框)自動打開home.php 輸入日期:(我輸入..)2011年3月31日。

等等。

我需要驗證,不會接受錯誤的日期格式格式必須是:01年3月1日 如何做到這一點? :(

+0

如果用戶只能輸入今天的日期,爲什麼它是可編輯的?你爲什麼不把它放在那裏? – 2011-03-31 06:18:15

+0

嗨Furgan,我不可能輸入今天的日期。我的概率是我無法得到昨天的日期。 :( – catsgirl008 2011-03-31 06:27:50

回答

83

昨天的日期僅僅是今天的日期少一個,所以:

var d = new Date(); 
d.setDate(d.getDate() - 1); 

如果今天是4月1日,然後將其設置爲0四月將其轉化爲3月31日

既然你也希望做一些其他的東西,這裏有一些功能來做到這一點:

// Check if d is a valid date 
// Must be format year-month name-date 
// e.g. 2011-MAR-12 or 2011-March-6 
// Capitalisation is not important 
function validDate(d) { 
    var bits = d.split('-'); 
    var t = stringToDate(d); 
    return t.getFullYear() == bits[0] && 
     t.getDate() == bits[2]; 
} 

// Convert string in format above to a date object 
function stringToDate(s) { 
    var bits = s.split('-'); 
    var monthNum = monthNameToNumber(bits[1]); 
    return new Date(bits[0], monthNum, bits[2]); 
} 

// Convert month names like mar or march to 
// number, capitalisation not important 
// Month number is calendar month - 1. 
var monthNameToNumber = (function() { 
    var monthNames = (
    'jan feb mar apr may jun jul aug sep oct nov dec ' + 
    'january february march april may june july august ' + 
    'september october november december' 
    ).split(' '); 

    return function(month) { 
    var i = monthNames.length; 
    month = month.toLowerCase(); 

    while (i--) { 
     if (monthNames[i] == month) { 
     return i % 12; 
     } 
    } 
    } 
}()); 

// Given a date in above format, return 
// previous day as a date object 
function getYesterday(d) { 
    d = stringToDate(d); 
    d.setDate(d.getDate() - 1) 
    return d; 
} 

// Given a date object, format 
// per format above 
var formatDate = (function() { 
    var months = 'jan feb mar apr may jun jul aug sep oct nov dec'.split(' '); 
    function addZ(n) { 
    return n<10? '0'+n : ''+n; 
    } 
    return function(d) { 
    return d.getFullYear() + '-' + 
      months[d.getMonth()] + '-' + 
      addZ(d.getDate()); 
    } 
}()); 

function doStuff(d) { 

    // Is it format year-month-date? 
    if (!validDate(d)) { 
    alert(d + ' is not a valid date'); 
    return; 
    } else { 
    alert(d + ' is a valid date'); 
    } 
    alert(
    'Date in was: ' + d + 
    '\nDay before: ' + formatDate(getYesterday(d)) 
); 
} 


doStuff('2011-feb-08'); 
// Shows 2011-feb-08 is a valid date 
//  Date in was: 2011-feb-08 
//  Day before: 2011-feb-07 
+0

感謝RobG!:) – catsgirl008 2011-04-18 02:17:39

+0

優秀...謝謝。 – 2015-06-23 14:50:29

11

一個內膽:

var yesterday = new Date(Date.now() - 864e5); // 864e5 == 86400000 == 24*60*60*1000 
+1

值得使用'8640000'而不是每次計算'24 * 60 * 60 * 1000'。 – 2015-12-23 04:46:34

+1

它應該是'86400000' – 2016-02-04 14:31:35

+0

@danielcorin你是對的。我只想讓答案清楚。我會更新答案。 '24 * 60 * 60 * 1000 ==> 86400000 ==> 864e5' – oriadam 2016-02-23 10:46:07