#javascript
#javascript
Вопрос:
var monthDiff = today.getMonth() - pastdate.getMonth();
var hadBirthdayThisMonth =
(today.getMonth() > pastdate.getMonth()) ?
true : (today.getMonth() < pastdate.getMonth()) ?
false : (today.getDate() > pastdate.getDate()) ?
true : (today.getDate() < pastdate.getDate()) ? false : true;
if (!hadBirthdayThisMonth) monthDiff--;
С 20 августа 2011 года по 19 сентября 2011 года количество дней равно 60, и для меня это показывает 2 месяца, но я хочу показать это one
месяц, пока не наступит его день рождения Sept 20th
.
Я придумал вышеуказанную логику, но она не работает.
Комментарии:
1. Святой вложенный тернарный оператор, Бэтмен! O_O
2. Кроме того, в чем вопрос? Вы просто хотите знать, сколько месяцев до следующего дня рождения? Или просто был ли день рождения в этом месяце или нет?
3. «Я придумал вышеуказанную логику, но она не работает». — Интересно, почему 😉
4. А если он родился 31 числа месяца? Когда будет конец месяца? И будут ли люди, родившиеся 29 февраля, получать день рождения каждые 4 года?
Ответ №1:
function isBDayInMonth(month, day) {
var today = new Date(),
birthDay = new Date(today.getFullYear(), month - 1, day, 0, 0, 0, 0); /*compose date*/
return (birthDay.getMonth() - today.getMonth() === 0) ? {
"msg": "this month",
"days": parseInt((birthDay.getTime() - today.getTime()) / 864E5, 10) === 0 ? "tomorrow" : parseInt((birthDay.getTime() - today.getTime()) / 864E5, 10) " days remaining"
} : (birthDay.getMonth() - today.getMonth() === 1) ? {
"msg": "next month",
"days": parseInt((birthDay.getTime() - today.getTime()) / 864E5, 10) " days remaining"
} : (today.getMonth() > birthDay.getMonth()) ? {
"msg": "in " ((11 - today.getMonth()) birthDay.getMonth()) " months",
"days": "many days remaining"
} : {
"msg": "in " (birthDay.getMonth() - today.getMonth()) " months",
"days": "many days remaining"
};
}
Работает во всех случаях — просто возвращает объект с 2 реквизитами:
- информация о месяце
- информация о днях, число отображается, только если день рождения в следующем месяце
Ответ №2:
С 20 августа 2011 по 19 сентября 2011 количество дней составляет 60
Я думаю, что обычно считается, что это 30 или 31, если включено 20-е число.
и это показывает 2 месяца для меня,
«это»? Это всего лишь один месяц.
Есть много способов определить, находится ли одна дата в пределах одного месяца от другой, например
function withinOneMonth(d0, d1) {
// Copy dates so don't affect originals
var t0 = new Date(d0);
var t1 = new Date(d1);
var t;
// Get sense right
if (t0 > t1) {
t = t0;
t0 = t1;
t1 = t;
}
// Check if within moth
t0.setMonth(t0.getMonth() 1);
// Not inclusive. To make inclusive, use >=
return t0 > t1;
}