您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

像在PHP中一样获得一年中的JavaScript

像在PHP中一样获得一年中的JavaScript

在观察夏令时和1月1日是星期五的年份中,日期存在问题。通过使用所有UTC方法进行修复。以下代码将相同的结果返回给Moment.js。

/* For a given date, get the ISO week number

 *

 * Based on information at:

 *

 *    http://www.merlyn.demon.co.uk/weekcalc.htm#WNR

 *

 * Algorithm is to find nearest thursday, it's year

 * is the year of the week number. Then get weeks

 * between that date and the first day of that year.

 *

 * Note that dates in one year can be weeks of prevIoUs

 * or next year, overlap is up to 3 days.

 *

 * e.g. 2014/12/29 is Monday in week  1 of 2015

 *      2012/1/1   is Sunday in week 52 of 2011

 */

function getWeekNumber(d) {

    // Copy date so don't modify original

    d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));

    // Set to nearest Thursday: current date + 4 - current day number

    // Make Sunday's day number 7

    d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));

    // Get first day of year

    var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));

    // Calculate full weeks to nearest Thursday

    var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7);

    // Return array of year and week number

    return [d.getUTCFullYear(), weekNo];

}



var result = getWeekNumber(new Date());

document.write('It\'s currently week ' + result[1] + ' of ' + result[0]);

创建“ UTC”日期时,小时为零。

最小化的原型版本(仅返回星期数):

Date.prototype.getWeekNumber = function(){

  var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));

  var dayNum = d.getUTCDay() || 7;

  d.setUTCDate(d.getUTCDate() + 4 - dayNum);

  var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));

  return Math.ceil((((d - yearStart) / 86400000) + 1)/7)

};



document.write('The current ISO week number is ' + new Date().getWeekNumber());
php 2022/1/1 18:14:09 有544人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶