JavaScript:将日/周转换为年份

时间:2012-10-24 08:36:16

标签: javascript function date dayofweek week-number

我现在使用Stack Overflow已有好几个月了,但这是我的第一篇文章。

我需要一个函数将周数和星期几转换为dd / mm / yyyy格式。

我必须使用的日期值采用day/weekNumber格式。例如:3/43转换为20XX年10月24日星期三。年份值将是当前年份。

日期值从1(星期一)开始。

我在互联网上找到了很多功能(例如thisthisthis)。有些人使用ISO 8601日期,我认为这对我不起作用。我还没有找到适合我的产品。

提前致谢,

3 个答案:

答案 0 :(得分:2)

假设您分别拥有343的值,您可以在当年的第一天做一些简单的数学运算:

  • 获得1月1日当年
  • 添加(43 * 7 + 3)

这样的事情可能是:

var currentDate = new Date();
var startOfYear = new Date(currentDate.getFullYear(), 0, 1);//note: months start at 0
var daysToAdd = (43 * 7) + 3;
//add days
startOfYear.setDate(startOfYear.getDate() + daysToAdd);

Here is an example


修改

再想一想,我认为你的要求是错的。您似乎需要一周中的特定日期。 Check this out以获得更好的解决方案。

问题是这一切都取决于你对一周的定义。今年是星期天开始的,这是否意味着02/01/2012(今年的第一个星期一)是第二周的开始?

我的最新示例将首先找到指定周的开始,然后找到指定日期的下一个出现

答案 1 :(得分:2)

此解决方案确实需要添加额外的库,但我认为这非常值得。它是一个用于操作日期和时间的momentjs库。它得到积极维护,并且有很好的documentation。获得day和weekNumber的值后(在我们的案例中为3和43),您应该执行以下操作:

function formatInput(day, weekNumber){

    var currentDate = moment(new Date());     // initialize moment to a current date
    currentDate.startOf('year');              // set to Jan 1 12:00:00.000 pm this year
    currentDate.add('w',weekNumber - 1);      // add number of weeks to the beginning of the year (-1 because we are now at the 1st week)
    currentDate.day(day);                     // set the day to the specified day, Monday being 1, Sunday 7

    alert(currentDate.format("dddd, MMMM Do YYYY"));  // return the formatted date string 
    return currentDate.format("dddd, MMMM Do YYYY");
}

我认为这个库以后可能对你有用,并且有很多关于日期和时间操作的可能性,以及格式化选项。还有一个伟大的文档为momentjs写。

答案 2 :(得分:1)

根据ISO处理周日期时,周从星期一开始,一年的第一周是包含一年中第一个星期四的那一周。因此,对于2012年,第一周于1月2日星期一开始,2013年第一周将于2012年12月31日星期一开始。

因此,如果3/43是第43周的第三天(即ISO日期2012-W43-3),那么可以使用以下方法将其转换为日期对象:

function customWeekDateToDate(s) {
  var d, n;
  var bits = s.split('/');

  // Calculate Monday of first week of year this year
  d = new Date();   
  d = new Date(d.getFullYear(),0,1); // 1 jan this year
  n = d.getDay();
  d.setDate(d.getDate() + (-1 * n +( n<5? 1 : 8)));

  // Add days
  d.setDate(d.getDate() + --bits[0] + --bits[1] * 7);

  return d;
}

console.log(customWeekDateToDate('3/43')); // 01 2012-10-24

请注意,这会使用日期,否则夏令时转换可能会导致错误的日期。