2013-03-08 74 views
0

我正在爲IE的Web表單工作。如何在特定的時間段內在特定的時間內爲用戶創建活動表格javascript

我已經完成了我的表格,但我需要用戶能夠在星期日下午6點之後的幾周內,只在星期一(第二天)的下午3點之前使用該表格。無論用戶在哪裏,這都需要在EST中。

我還沒有用Javascript很多,我完全喪失瞭如何做到這一點。我遇到的最大麻煩是今年的決定是在一個偶數週。 (甚至周是工資周,這只是當表格應該使用。)

我想今天的日期是在一個偶數週的標準是第一個過濾器。如果有其他陳述來確定今天的日子和小時是否符合我的標準要求.getUTCDay().getUTCHours(),我寫過了。

我正在考慮使用符合條件的星期日和星期一日期的數組,但不知道如何編寫if語句來查看今天的日期是否在數組中。非常感激任何的幫助。

+1

在一個側面說明,一定要驗證表單服務器端以及!客戶端JavaScript可以禁用用戶繞過檢查。 – thgaskell 2013-03-08 00:49:31

回答

0

你的第一個問題是在正確的時間獲取日期對象。世界上至少有3個不同時區使用「EST」時區,但我假設您需要UTC-05:00的美國EST。

Javascript日期對象的心臟有UTC時間值,因此您可以獲取本地日期對象,減去5小時,然後使用UTC方法獲取等效美國EST時區的值。一旦你有了這個日期對象,你只需要得到每個答案here的星期編號,除了你應該使用UTC方法而不是普通的日期方法(例如getUTCFullYear而不是getFullYear)。

請注意,這將忽略客戶端位置的夏令時,並且EST未指示夏令時是否生效。通常會給出不同的時區指示符(例如,使用美國的EST以及夏令時的時區稱爲它們的時區EDT,時區爲UTC-04:00)。

下面是一些應該完成這項工作的代碼,注意它只是經過了輕微的測試。我決定包含本地時區偏移量以使其一致並可能更易於理解。

// Returns true or false if current date is 
// an even week of the year in timezone UTC-5:00 
// Adjust local date object to be UTC-5:00 object 
// Provide a date object to test, or undefined for 
// current date 
function isPayWeek(d) { 
    d = d? new Date(d) : new Date(); 

    // Adjust for local timezone and US EST in minutes 
    d.setMinutes(d.getMinutes() + d.getTimezoneOffset() - 300); 

    // return true if week number is even (note: zero is even) 
    return !(getWeekNumber(d)[1] % 2) 
} 


function getWeekNumber(d) { 
    d = new Date(d); 
    d.setHours(0,0,0); 
    d.setDate(d.getDate() + 4 - (d.getDay()||7)); 

    var yearStart = new Date(d.getFullYear(),0,1); 
    var weekNo = Math.ceil((((d - yearStart)/86400000) + 1)/7) 

    // Return array of year and week number 
    return [d.getFullYear(), weekNo]; 
} 

var d = new Date(2013,0,20,20,0,0); // 2013-01-20T10:00:00Z 
var w = getWeekNumber(d); // week 3, 2013 
alert(d + '\n' + 'week: ' + w + '\n' + isPayWeek(d)); // false 

var d = new Date(2012,11,31,20,0,0); // 2012-12-31T10:00:00Z 
var w = getWeekNumber(d); // week 1, 2013 

alert(d + '\n' + 'week: ' + w + '\n' + isPayWeek(d)); // false 

var d = new Date(2013,0,7,20,0,0); // 2013-01-07T10:00:00Z 
var w = getWeekNumber(d); // week 2, 2013 

alert(d + '\n' + 'week: ' + w + '\n' + isPayWeek(d)); // true 
相關問題