如何在特定时段javascript期间的特定日期的某些星期内向用户激活表单

时间:2013-03-08 00:06:27

标签: javascript html arrays forms date

我正在处理IE的网络表单。

我的表格已经完成,但我要求用户只能在星期日下午6点到星期一(第二天)下午3点之间使用表格。无论用户身在何处,都需要在EST中。

我还没有使用过很多Javascript,我完全不知道如何做到这一点。我最麻烦的是今天确定的是今年的一周。 (甚至几周是付周数,这只是在使用表格的时候。)

我希望今天的日期是以偶数周的标准成为第一个过滤器。我写了if if else语句,以确定今天的日期和时间是否满足我的标准要求.getUTCDay().getUTCHours()

我正在考虑使用符合条件的星期日和星期一日期的数组,但不知道如何编写if语句以查看今天的日期是否在数组中。任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:0)

您可以使用JavaScript Date对象(请参阅:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date)查看当前日期,甚至可以将其解析为您喜欢的任何格式。然后做你的表单逻辑。

对于更精细的Date操作,您可以查看 Moment.js http://momentjs.com/ 这是一个非常全面的库,用于处理日期/时间。

答案 1 :(得分:0)

您的第一个问题是在正确的时间内获取日期对象。时区“EST”在世界上至少3个不同的地区用于不同的时区,但我假设你想要UTC-05:00的美国东部时间。

Javascript日期对象的核心是UTC时间值,因此您可以获取本地日期对象,减去5小时,然后使用UTC方法获取等效的美国EST时区的值。一旦你有了这个日期对象,你只需要得到答案here的周数,除了你应该使用UTC方法而不是普通日期方法(例如getUTCFullYear而不是getFullYear)。

请注意,这将忽略客户端位置的夏令时,并且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