在我的 javascript 應用程式中,我收到一個字串格式的日期,如下所示:'19/10/2021' (dd/mm/yyyy) 基本上我想檢查自所述日期以來是否過了一個月并回傳一個 true如果是這樣的話。我正在嘗試這樣的事情,但它不起作用,當我嘗試使用 console.logs 等除錯它時,我得到了一些奇怪的值,我是 js 的新手,所以我不知道我在哪里做錯事。
var q = new Date();
var d = q.getDate();
var m = q.getMonth() 1; // 1 because january is 0 and etc
var y = q.getFullYear();
var today = new Date(d,m,y);
mydate = userDate // this is the string the app is receiving
if(today-mydate>30)
{
return true;
}
else
{
return false;
}
提前致謝
uj5u.com熱心網友回復:
嘗試這個:
var q = new Date();
var d = q.getDate();
var m = q.getMonth();
var y = q.getFullYear();
var today = new Date(y,m,d);
var mydate = new Date("2021-11-22");
if(((today - mydate)/ (1000 * 60 * 60 * 24)) > 30)
{
return true;
}
else
{
return false;
}
uj5u.com熱心網友回復:
首先,當你設定q到new Date()它是今天。無需從中獲取日、月和年,然后重新設定。所以今天你可以做var today = new Date()。
其次,您應該傳入 Date()y,m,d而不是d,m,y.
第三,如果您從另一個日期中減去一個日期,則計算將以毫秒為單位,而不是天數。
這應該有效:
var userDate = '19/10/2021';
var myDate = new Date(userDate.split('/').reverse());
var today = new Date();
var thirtyDays = 1000*60*60*24*30;
return today - myDate > thirtyDays;
uj5u.com熱心網友回復:
因為“以月為單位的年齡”的定義是……靈活的,最簡單的方法是使用一點算術,就像您在頭腦中計算它一樣,而不涉及Date課堂。
對于 [a] 人類對“月齡”的解釋,規則是
以月為單位計算兩個日期之間的差值,就好像這兩個日期的月份中的第 1 天一樣
減 1 以排除最后一個月
然后,如果期間最后一天的月中日在該期間第一天的月中日或之后,則 [可能部分] 最后一個月是完整的:加 1恢復計數
美中不足的是,由于月份包含不同的天數,因此處理 2 個月的天數不同的情況。
但是,如果結束月份比開始月份短,您可能會遇到永遠無法滿足邊界條件的情況(例如,開始日期是 2 月 28 日,結束日期是 3 月 31 日。要解決這個問題,您需要將“月末”視為從開始月份的最后一天到結束月份的最后一天(含)的視窗。
這導致了這個代碼。我使用如下結構來表示日期:
{
year: 2021 , // 4-digit year
month: 11 , // month of year (1-12 mapping to January-December)
day: 23 // day of month (1-[28-31] depending on year/month
}
確保該結構中的資料代表有效日期作為練習留給讀者。
代碼并不復雜:
/**
*
* @param {object} bgn - start date of period
* @param {number} bgn.year - 4-digit year
* @param {number} bgn.month - month of year [1-12]
* @param {number} bgn.day - day of month [1-31]
*
* @param {object} end - end date of period
* @param {number} end.year - 4-digit year
* @param {number} end.month - month of year [1-12]
* @param {number} end.day - day of month [1-31]
*
*/
function diffInMonths( bgn , end ) {
const between = ( x , min , max ) => x >= min && x <= max;
// We'll need to add back the final month based on the following:
// - end.day >= bgn.day -- we've passed the month boundary, or
// - end.day is within the end-of-month window
// (when the end month is shorter than the start month)
const needAdjustment = end.day >= bgn.day
|| between( end.day, daysInMonth(bgn), daysInMonth(end) );
const finalMonthAdjustment = needsAdjustment ? 1 : 0;
const deltaM = 12 * ( end.year - bgn.year )
( end.month - bgn.month )
- 1 // remove the final month from the equation
finalMonthAdjustment // add in the precomputed final month adjustment
;
return deltaM;
}
/**
*
* @param {object} dt - date
* @param {number} dt.year - 4-digit year
* @param {number} dt.month - month of year [1-12]
* @param {number} dt.day - day of month [1-31]
*
*/
function daysInMonth(dt) {
const leapYear = ( dt.year % 4 === 0 && dt.year % 100 !== 0 ) || dt.year % 400 === 0;
const monthDays = leapYear ? daysPerMonthLeap : daysPerMonth;
const days = monthDays[dt.month];
return days;
}
// jan feb mar apr may jun jul aug sep oct nov dec
// ---------- --- --- --- --- --- --- --- --- --- --- --- ---
const daysPerMonth = [ undefined, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, ];
const daysPerMonthLeap = [ undefined, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, ];
uj5u.com熱心網友回復:
問題是您正在從日期中減去一個字串。您需要 mydate 與今天的型別相同。
mydate = new Date(userDate)
(注意:這只適用于“月/日/年”格式
uj5u.com熱心網友回復:
如果您的日期采用這種格式 (19/10/2021),您可以先提取它們。
const thOneMonth = 1000*60*60*24*31 //31 days in milliseconds
let formated = '19/10/2021'.split('/')
let date = Date.parse(formated[2], formated[1]-1, formated[0])
let date2 = 1634591678400 //date 2678400000 a month later. This is in UNIX format.
if(date thOneMonth == date2 ){//31 days
//A month have passed
console.log(date thOneMonth )
}
例如,如果您想知道它是否是 9 月 12 日和下一個日期是 10 月 12 日,您必須考慮 9 月是 30 天。您必須根據 31/30/29/28 天的月份進行檢查。
const thMonth = 1000*60*60*24*30 //30 days in milliseconds
let formated = '19/10/2021'.split('/')
let date = new Date(formated[2], formated[1]-1, formated[0])// make months start from 0
let date2 = 1634591678400 //date 2678400000 a month later
if([5,7,10,12].includes(date.getMonth() 1) && Date.parse(date) thMonth == date2 ){ // 30 days months 1000*60*60*24*30 //it won't enter here
//A month have passed
console.log(date thMonth)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/368187.html
標籤:javascript 日期
下一篇:如何格式化日期輸入?
