0

我正在为 IE 制作一个 web 表单。

我已经完成了我的表格,但我需要用户只能在周日下午 6 点之后的偶数周内使用该表格,直到周一(第二天)下午 3 点。无论用户在哪里,这都需要在 EST 中。

我没有经常使用 Javascript,并且对如何做到这一点完全不知所措。我遇到的最大麻烦是确定今天是一年中的一个偶数周。(即使是几周也是工资周,这只是应该使用表格的时候。)

我希望今天的日期在偶数周标准中作为第一个过滤器。我已经编写了 if、if else 语句以确定今天的日期和时间是否符合我的标准要求.getUTCDay().getUTCHours().

我正在考虑使用一组合格的周日和周一日期,但不确定如何编写 if 语句来查看今天的日期是否在数组中。非常感激任何的帮助。

4

2 回答 2

0

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

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

于 2013-03-08T00:10:28.753 回答
0

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

Javascript 日期对象的核心是 UTC 时间值,因此您可以获取本地日期对象,减去 5 小时,然后使用 UTC 方法获取等效的美国东部时间时区的值。一旦你有了那个日期对象,你只需要在这里得到每个答案的周数, 除了你应该使用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
于 2013-03-08T00:48:13.840 回答