经过几次搜索,我一直无法找到我要找的东西。我jquery datepicker
用来返回一个看起来像的日期字符串,Day, Month Date, YYYY
我正在寻找一个库或一些方法来将它转换为
the second Tuesday of the month
, 或the fourth Thursday of the month
. 到目前为止,它看起来像 jqueryprettyDate
并且EasyDate
没有我正在寻找的功能,我很想避免手动执行此操作!
谢谢,亚历克斯
经过几次搜索,我一直无法找到我要找的东西。我jquery datepicker
用来返回一个看起来像的日期字符串,Day, Month Date, YYYY
我正在寻找一个库或一些方法来将它转换为
the second Tuesday of the month
, 或the fourth Thursday of the month
. 到目前为止,它看起来像 jqueryprettyDate
并且EasyDate
没有我正在寻找的功能,我很想避免手动执行此操作!
谢谢,亚历克斯
您不需要日期库 - 只需获取日期,除以 7 并四舍五入即可。
//format: Day, Month Date, YYYY
var ordinals = ["", "first", "second", "third", "fourth", "fifth"];
var date = "Friday, May 10, 2013";
var tokens = date.split(/[ ,]/);
// tokens = ["Friday", "", "May", "10", "", "2013"];
console.log( "The " + ordinals[Math.ceil(tokens[3]/7)] + " " + tokens[0] + " of the month");
function nthDay(D){
var nth= ['First', 'Second', 'Third', 'Fourth', 'Fifth'],
dayNames= ['Sunday', 'Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday', 'Saturday'],
monthNames= ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'];
return nth[Math.floor(D.getDate()/7)]+' '+
dayNames[D.getDay()]+' of '+monthNames[D.getMonth()];
}
nthDay(新日期(2013, 4, 10))
/* 返回值:5 月的第二个星期五 */
In Date.js you have some helpful functions like moveToFirstDayOfMonth
and getWeek
.
Then you can get the week of the first day of the month and subtract those two to get the week of the month.
Here is a simple example using Date.js and going off of today but you can pass in your own date. I am not too familiar with other Date libraries but I think you can recreate something like this below.
function dayOfWeekToday(){
//Get the total weeks on the year from this day
var totalWeek = Date.today().getWeek();
//Get the first day of this month
var firstOfMonth = Date.today().moveToFirstDayOfMonth();
//Get the total weeks form the first day of the month
var weeksAtStartOfMonth = firstOfMonth.getWeek();
//Get the week of the month
var week = totalWeek - weeksAtStartOfMonth;
//Get the day(0-6) of today and the first day
var today = Date.today().getDay();
var firstDay = firstOfMonth.getDay();
//If today is before the firstDay then the week will be off by one
if(today < firstDay){
week--;
}
//Get the day form of the string
var day = Date.today().toString("dddd");
//Translate from a number to a string
var str = "first";
if(week === 1){
str = "second";
}else if(week === 2){
str = "third";
}else if(week === 3){
str = "fourth";
}else if (week === 4){
str = "fifth";
}
//Result
return "The "+str+" "+day+" of the month";
}
I wrote some simple logic that just works backwards from the value of the date:
function calculateNthDate(startDateDay, startDateValue){
var day = startDateDay;
var date = startDateValue;
var i = 0;
while(date >= 0){
if (date > 0 ){
i++;
}
date = date - 7;
}
var string = "The "+i+'th '+day+" of the month.";
}
edit: the th
will have to be customized for nd
, st
, and rd
.
这是我过去使用的一个脚本,如果 momentjs 不适合你(尽管我真的认为 momentjs 是一个更好的解决方案)。
/*
Parameters:
index: n'th occurrence of the specified day
day: daynumber - javascript way where sunday is 0 and is saturday is 6
month: javascript way which is 0-11 [optional - defaults to current]
year: Full year - four digits [optional - defaults to current]
*/
function getNthDayOfMonth(index,day,month,year){
// Create date object
var date = new Date();
// Set to first day of month
date.setDate(1);
// If supplied - set the month
if(month!==''&&month!==undefined){
// Set month
date.setMonth(month);
}else{
month = date.getMonth();
}
// If supplied - set the year
if(year!==''&&year!==undefined){
// Set year
date.setFullYear(year);
}else{
year = date.getFullYear();
}
// Find daynumber
firstDay = date.getDay();
// Find first friday.
while(date.getDay()!=day){
date.setDate(date.getDate()+1) ;
}
switch(index){
case 2:
date.setDate(date.getDate()+7);
break;
case 3:
date.setDate(date.getDate()+14);
break;
case 4:
date.setDate(date.getDate()+21);
break;
case 5:
date.setDate(date.getDate()+28);
if(date.getMonth()!==month){
date = null;
}
break;
}
return date;
}