월말일 계산
「 」를 는,0
처 dayValue
Date.setFullYear
전달의 마지막 날이 표시됩니다.
d = new Date(); d.setFullYear(2008, 11, 0); // Sun Nov 30 2008
이 동작은 Mozilla에서 참조됩니다.이 기능은 신뢰할 수 있는 크로스 브라우저 기능입니까, 아니면 다른 방법을 찾아야 합니까?
var month = 0; // January
var d = new Date(2008, month + 1, 0);
console.log(d.toString()); // last day in January
IE 6: Thu Jan 31 00:00:00 CST 2008
IE 7: Thu Jan 31 00:00:00 CST 2008
IE 8: Beta 2: Thu Jan 31 00:00:00 CST 2008
Opera 8.54: Thu, 31 Jan 2008 00:00:00 GMT-0600
Opera 9.27: Thu, 31 Jan 2008 00:00:00 GMT-0600
Opera 9.60: Thu Jan 31 2008 00:00:00 GMT-0600
Firefox 2.0.0.17: Thu Jan 31 2008 00:00:00 GMT-0600 (Canada Central Standard Time)
Firefox 3.0.3: Thu Jan 31 2008 00:00:00 GMT-0600 (Canada Central Standard Time)
Google Chrome 0.2.149.30: Thu Jan 31 2008 00:00:00 GMT-0600 (Canada Central Standard Time)
Safari for Windows 3.1.2: Thu Jan 31 2008 00:00:00 GMT-0600 (Canada Central Standard Time)
는 의 합니다.toString()
날짜가 달라서가 아니라 구현해야 합니다.
물론 위에서 설명한 브라우저가 전월 말일에 0을 사용한다고 해서 계속 사용되거나 나열되지 않은 브라우저가 사용된다는 것을 의미하지는 않지만 모든 브라우저에서 동일하게 작동해야 한다는 믿음에 신빙성을 부여합니다.
나는 이것이 나에게 가장 좋은 해결책이라고 생각한다.Date 객체에 의해 계산됩니다.
var today = new Date();
var lastDayOfMonth = new Date(today.getFullYear(), today.getMonth()+1, 0);
day 파라미터를 0으로 설정하는 것은 그 달의 마지막 날인 그 달의 첫 날보다 하루 적은 것을 의미합니다.
다음 달 1일의 중간 날짜를 사용하여 전날의 날짜를 반환합니다.
int_d = new Date(2008, 11+1,1);
d = new Date(int_d - 1);
퓨터 in in in in in in in in innew Date()
★★★★★★★★★★★★★★★★★」regular expression
해결이 느리다!초고속(및 초크립틱) 원라이너를 원하신다면 이 원라이너를 사용해 보세요(전제로).m
에 Jan=1
포맷)을 클릭합니다.최상의 성능을 얻기 위해 여러 가지 코드 변경을 시도합니다.
현재 가장 빠른 버전:
비트 연산자(놀라운 속도)를 사용한 윤년 체크를 통해 25와 15의 매직넘버가 나타내는 것을 확인한 후, 다음과 같은 최적의 혼재된 답변을 생각해냈습니다.
function getDaysInMonth(m, y) {
return m===2 ? y & 3 || !(y%25) && y & 15 ? 28 : 29 : 30 + (m+(m>>3)&1);
}
, 이것은 「」라고 하는 로 하고 있습니다.m
&y
츠키다숫자를 문자열로 전달하면 이상한 결과가 생기기 때문입니다.
JSFiddle: http://jsfiddle.net/TrueBlueAussie/H89X3/22/
JSPerf 결과: http://jsperf.com/days-in-month-head-to-head/5
웬일인지 그래.(m+(m>>3)&1)
입니다.(5546>>m&1)
거의 모든 브라우저에서.
속도 면에서 진정한 경쟁자는 @GitaarLab뿐입니다.그래서 테스트용 JSPerf를 만들었습니다.http://jsperf.com/days-in-month-head-to-head/5
여기의 윤년 회답에 근거해 동작합니다.javascript to find lean year this answer here Leap year check bitwise 연산자(놀라운 속도) 및 다음 바이너리 로직을 사용합니다.
바이너리 월의 간단한 레슨:
원하는 달의 지수(1월 = 1)를 2진수로 해석하면 31일이 있는 달은 비트가 3이고 비트가 0이거나 비트가 3이고 비트가 0인 것을 알 수 있습니다.
Jan = 1 = 0001 : 31 days
Feb = 2 = 0010
Mar = 3 = 0011 : 31 days
Apr = 4 = 0100
May = 5 = 0101 : 31 days
Jun = 6 = 0110
Jul = 7 = 0111 : 31 days
Aug = 8 = 1000 : 31 days
Sep = 9 = 1001
Oct = 10 = 1010 : 31 days
Nov = 11 = 1011
Dec = 12 = 1100 : 31 days
, 이 세 을 ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ)로 바꿀 수 있습니다.>> 3
비트인 , "XOR" 을 사용합니다^ m
.1
★★★★★★★★★★★★★★★★★」0
비트 위치 0에서 사용& 1
" " " 입니다.+
XOR)보다.^
및 )의 개요(m >> 3) + m
비트 0에서도 같은 결과를 얻을 수 있습니다.
JSPerf 결과:http://jsperf.com/days-in-month-perf-test/6
동료가 우연히 다음과 같은 것을 발견했는데, 이것이 더 쉬운 해결책일 수 있습니다.
function daysInMonth(iMonth, iYear)
{
return 32 - new Date(iYear, iMonth, 32).getDate();
}
http://snippets.dzone.com/posts/show/2099에서 도난당했습니다.
Lebreeze에 의해 제공되는 솔루션의 약간의 수정:
function daysInMonth(iMonth, iYear)
{
return new Date(iYear, iMonth, 0).getDate();
}
저는 최근에 비슷한 일을 해야 했습니다.이것이 제가 생각해낸 것입니다.
/**
* Returns a date set to the begining of the month
*
* @param {Date} myDate
* @returns {Date}
*/
function beginningOfMonth(myDate){
let date = new Date(myDate);
date.setDate(1)
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
return date;
}
/**
* Returns a date set to the end of the month
*
* @param {Date} myDate
* @returns {Date}
*/
function endOfMonth(myDate){
let date = new Date(myDate);
date.setDate(1); // Avoids edge cases on the 31st day of some months
date.setMonth(date.getMonth() +1);
date.setDate(0);
date.setHours(23);
date.setMinutes(59);
date.setSeconds(59);
return date;
}
날짜를 지정하면 월초 또는 월말로 설정된 날짜가 반환됩니다.
begninngOfMonth
이 함수의 과 같습니다.endOfMonth
그 을 다음 달로 늘려서 setDate(0)
setDate는 다음과 같이 설정합니다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setDate https://www.w3schools.com/jsref/jsref_setdate.asp
그런 다음 시/분/초를 하루의 끝으로 설정합니다. 그러면 날짜 범위를 예상하는 API를 사용할 경우 해당 날짜 전체를 캡처할 수 있습니다.이 부분은 원래 게시물이 요구하는 수준을 넘어섰을 수도 있지만, 비슷한 솔루션을 찾는 다른 사용자에게 도움이 될 수 있습니다.
를 설정할 도 있습니다: 집집마마마 edit edit edit edit edit edit edit edit edit edit edit edit edit edit edit edit edit 。setMilliseconds()
면더면면면면면면면면면면면
이거 드셔보세요.
lastDateofTheMonth = new Date(year, month, 0)
예:
new Date(2012, 8, 0)
출력:
Date {Fri Aug 31 2012 00:00:00 GMT+0900 (Tokyo Standard Time)}
하지 않는 방법
이 달의 마지막 회답은 다음과 같습니다.
var last = new Date(date)
last.setMonth(last.getMonth() + 1) // This is the wrong way to do it.
last.setDate(0)
은 대부분의하지만, 「」가 「」로 설정되어 있는 경우는 합니다.date
는 다음 달보다 날짜가 많은 달의 마지막 날입니다.
예:
가정하다date
07/31/21
.
★★★★★★★★★★★★★★★.last.setMonth(last.getMonth() + 1)
만, 그 은 「월수」로 합니다.31
.
[ Date ]의 [됩니다.08/31/21
,
사실은 09/01/21
.
그래서...last.setDate(0)
을 낳다08/31/21
저희가 정말 원했던 건07/31/21
.
난 이거면 돼.지정된 연도 및 월의 마지막 날을 제공합니다.
var d = new Date(2012,02,0);
var n = d.getDate();
alert(n);
이 제품은 잘 작동합니다.
Date.prototype.setToLastDateInMonth = function () {
this.setDate(1);
this.setMonth(this.getMonth() + 1);
this.setDate(this.getDate() - 1);
return this;
}
이렇게 하면 현재 달의 시작일과 마지막 날이 표시됩니다.
year'를 변경해야 할 경우 d.getFullYear()를 삭제하고 연도를 설정합니다.
'month'를 변경해야 할 경우 d.getMonth()를 삭제하고 연도를 설정합니다.
var d = new Date();
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var fistDayOfMonth = days[(new Date(d.getFullYear(), d.getMonth(), 1).getDay())];
var LastDayOfMonth = days[(new Date(d.getFullYear(), d.getMonth() + 1, 0).getDay())];
console.log("First Day :" + fistDayOfMonth);
console.log("Last Day:" + LastDayOfMonth);
alert("First Day :" + fistDayOfMonth);
alert("Last Day:" + LastDayOfMonth);
이것을 시험해 보세요.
function _getEndOfMonth(time_stamp) {
let time = new Date(time_stamp * 1000);
let month = time.getMonth() + 1;
let year = time.getFullYear();
let day = time.getDate();
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
case 2:
if (_leapyear(year))
day = 29;
else
day = 28;
break
}
let m = moment(`${year}-${month}-${day}`, 'YYYY-MM-DD')
return m.unix() + constants.DAY - 1;
}
function _leapyear(year) {
return (year % 100 === 0) ? (year % 400 === 0) : (year % 4 === 0);
}
다음 코드를 따라 해당 달의 처음 및 마지막 날짜를 얻을 수 있습니다.
var dateNow = new Date();
var firstDate = new Date(dateNow.getFullYear(), dateNow.getMonth(), 1);
var lastDate = new Date(dateNow.getFullYear(), dateNow.getMonth() + 1, 0);
또는 커스텀 형식으로 날짜를 포맷하고 싶다면 모멘트 js를 사용할 수 있습니다.
var dateNow= new Date();
var firstDate=moment(new Date(dateNow.getFullYear(),dateNow.getMonth(), 1)).format("DD-MM-YYYY");
var currentDate = moment(new Date()).format("DD-MM-YYYY"); //to get the current date var lastDate = moment(new
Date(dateNow.getFullYear(), dateNow.getMonth() + 1, 0)).format("DD-MM-YYYY"); //month last date
const today = new Date();
let beginDate = new Date();
let endDate = new Date();
// fist date of montg
beginDate = new Date(
`${today.getFullYear()}-${today.getMonth() + 1}-01 00:00:00`
);
// end date of month
// set next Month first Date
endDate = new Date(
`${today.getFullYear()}-${today.getMonth() + 2}-01 :23:59:59`
);
// deducting 1 day
endDate.setDate(0);
다음 함수는 월의 마지막 날을 나타냅니다.
function getLstDayOfMonFnc(date) {
return new Date(date.getFullYear(), date.getMonth(), 0).getDate()
}
console.log(getLstDayOfMonFnc(new Date(2016, 2, 15))) // Output : 29
console.log(getLstDayOfMonFnc(new Date(2017, 2, 15))) // Output : 28
console.log(getLstDayOfMonFnc(new Date(2017, 11, 15))) // Output : 30
console.log(getLstDayOfMonFnc(new Date(2017, 12, 15))) // Output : 31
마찬가지로 월의 첫 번째 날을 얻을 수 있습니다.
function getFstDayOfMonFnc(date) {
return new Date(date.getFullYear(), date.getMonth(), 1).getDate()
}
console.log(getFstDayOfMonFnc(new Date(2016, 2, 15))) // Output : 1
여기 GMT와 최초 날짜의 시간을 보존하는 답변이 있습니다.
var date = new Date();
var first_date = new Date(date); //Make a copy of the date we want the first and last days from
first_date.setUTCDate(1); //Set the day as the first of the month
var last_date = new Date(first_date); //Make a copy of the calculated first day
last_date.setUTCMonth(last_date.getUTCMonth() + 1); //Add a month
last_date.setUTCDate(0); //Set the date to 0, this goes to the last day of the previous month
console.log(first_date.toJSON().substring(0, 10), last_date.toJSON().substring(0, 10)); //Log the dates with the format yyyy-mm-dd
function getLastDay(y, m) {
return 30 + (m <= 7 ? ((m % 2) ? 1 : 0) : (!(m % 2) ? 1 : 0)) - (m == 2) - (m == 2 && y % 4 != 0 || !(y % 100 == 0 && y % 400 == 0));
}
날짜를 달로 설정하고 날짜를 0으로 설정하므로 날짜 함수는 1~31로 월을 시작하고 마지막 날을 가져옵니다.
var last = new Date(new Date(new Date().setMonth(7)).setDate(0)).getDate();
console.log(last);
의미론적인 문제인 건 알지만 결국엔 이런 형태로 사용했어요.
var lastDay = new Date(new Date(2008, 11+1,1) - 1).getDate();
console.log(lastDay);
함수는 inside 인수로 해결되므로 외향적으로는 동일하게 동작합니다.
그런 다음 현재 날짜의 연도 및 월/년을 필요한 세부 정보로 바꿀 수 있습니다.또는 특정 월/년.
정확한 월말(밀리초 단위)(타임스탬프 등)이 필요한 경우:
d = new Date()
console.log(d.toString())
d.setDate(1)
d.setHours(23, 59, 59, 999)
d.setMonth(d.getMonth() + 1)
d.setDate(d.getDate() - 1)
console.log(d.toString())
저는 인정된 답변이 통하지 않습니다, 저는 아래와 같이 했습니다.
$( function() {
$( "#datepicker" ).datepicker();
$('#getLastDateOfMon').on('click', function(){
var date = $('#datepicker').val();
// Format 'mm/dd/yy' eg: 12/31/2018
var parts = date.split("/");
var lastDateOfMonth = new Date();
lastDateOfMonth.setFullYear(parts[2]);
lastDateOfMonth.setMonth(parts[0]);
lastDateOfMonth.setDate(0);
alert(lastDateOfMonth.toLocaleDateString());
});
});
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<link rel="stylesheet" href="/resources/demos/style.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
<p>Date: <input type="text" id="datepicker"></p>
<button id="getLastDateOfMon">Get Last Date of Month </button>
</body>
</html>
이것으로 이달의 마지막 날을 알 수 있습니다.
주의: IOS 디바이스에서는 시간을 포함합니다.#gshoanghanh
var date = new Date();
console.log(new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59));
다음 달 마지막 날짜만 잡으시면 됩니다.
var d = new Date();
const year = d.getFullYear();
const month = d.getMonth();
const lastDay = new Date(year, month +1, 0).getDate();
console.log(lastDay);
https://www.w3resource.com/javascript-exercises/javascript-date-exercise-9.php에서 시험해 보세요.
내 경우, 이 코드는 유용했다.
end_date = new Date(2018, 3, 1).toISOString().split('T')[0]
console.log(end_date)
언급URL : https://stackoverflow.com/questions/222309/calculate-last-day-of-month
'programing' 카테고리의 다른 글
jQuery를 사용하여 페이지의 스크롤 위치를 탐지하는 방법 (0) | 2022.11.26 |
---|---|
MySQL XML 출력 필드 이름을 사용 가능한 태그 이름으로 변환 (0) | 2022.11.26 |
Sequel Pro와 MySQL을 연결하지 못했습니다. (0) | 2022.11.26 |
JavaScript 문자열 트리밍 (0) | 2022.11.26 |
Java에서 printStackTrace() 메서드는 어떤 용도로 사용됩니까? (0) | 2022.11.26 |