我知道这个线程:优雅地检查给定日期是否是昨天
但我只是专门寻找 JavaScript 解决方案。如果可以的话短一点。我实在找不到一个100%可靠的方法..
到目前为止我就是这样做的:
function FormatDate(someDtUTC) {
var someDt = new Date(someDtUTC.getTime() + someDtUTC.getTimezoneOffset() * 60 * 1000);
var dtNow = new Date();
if (dtNow.getUTCFullYear() == someDt.getUTCFullYear() && dtNow.getUTCMonth() == someDt.getUTCMonth()) {
if (dtNow.getUTCDate() == someDt.getUTCDate())
var dateString = "Today, " + Ext.Date.format(someDt, 'G:i'); // Today, 15:32
else if (dtNow.getUTCDate() - 1 == someDt.getUTCDate())
var dateString = "Yesterday, " + Ext.Date.format(someDt, 'G:i'); //Yesterday, 13:26
else if (dtNow.getUTCDate() - someDt.getUTCDate() < 7)
var dateString = Ext.Date.format(someDt, 'l, G:i'); //Sunday, 14:03
} else
var dateString = Ext.Date.format(someDt, 'j.n.y\, G:i'); //7.8.15, 8:25
return dateString;
}
不要担心
Ext.Date.format()
函数,它不是问题的一部分。
该代码的问题是,它无法处理以下情况:
Today: 01.08.15
Yesterday: 31.07.15
知道如何告诉函数也处理这个问题吗?
我不是在寻找带有外部库(包括 ExtJS)的解决方案。我想用原始 JavaScript 来解决这个问题。
如果您想打印今天、昨天,显示星期几,如果当前年份显示不带年份的日期,如果上一年则显示带年份的日期,下面的代码将帮助您。
var fulldays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
function formatDate(someDateTimeStamp) {
var dt = new Date(someDateTimeStamp),
date = dt.getDate(),
month = months[dt.getMonth()],
timeDiff = someDateTimeStamp - Date.now(),
diffDays = new Date().getDate() - date,
diffMonths = new Date().getMonth() - dt.getMonth(),
diffYears = new Date().getFullYear() - dt.getFullYear();
if(diffYears === 0 && diffDays === 0 && diffMonths === 0){
return "Today";
}else if(diffYears === 0 && diffDays === 1) {
return "Yesterday";
}else if(diffYears === 0 && diffDays === -1) {
return "Tomorrow";
}else if(diffYears === 0 && (diffDays < -1 && diffDays > -7)) {
return fulldays[dt.getDay()];
}else if(diffYears >= 1){
return month + " " + date + ", " + new Date(someDateTimeStamp).getFullYear();
}else {
return month + " " + date;
}
}
formatDate(Date.now()) //"Today"
formatDate(Date.now() - 86400000) // "Yesterday"
formatDate(Date.now() - 172800000) // it will return the name of the week if it is beyond two days
好的,我们可以按照以下步骤进行:
Date()
对象。.setTime()
将时间设置为两者的特定时间。.getTime()
,计算毫秒。86400000
,那就是昨天。86400000
的倍数,则为天数。JavaScript 代码
var a = new Date(2015, 8 - 1, 25); // Today
var b = new Date(2015, 8 - 1, 24); // Yesterday
var c = new Date(); // Now
c.setHours(0);
c.setMinutes(0);
c.setSeconds(0, 0);
if (a.getTime() == c.getTime())
return "Today";
else if (b.getTime() == c.getTime())
return "Yesterday";
else if ((new Date(2015, 8 - 1, 25 - 7)).getTime() < c.getTime())
return "Less than a week";
我基于@Kapilrc 源代码构建。语言变量应该对 toLocaleString() 有效。享受吧!
function create_human_friendly_date(
timestamp,
yesterday_text,
today_text,
tomorrow_text,
language
) {
var in_the_last_7days_date_options = { weekday: 'long'};
var in_the_next_7days_date_options = { month: 'short', day: 'numeric' };
var same_year_date_options = { month: 'short', day: 'numeric' };
var far_date_options = { year: 'numeric', month: 'short', day: 'numeric' };
var dt = new Date(timestamp);
var date = dt.getDate();
var time_diff = timestamp - Date.now();
var diff_days = new Date().getDate() - date;
var diff_months = new Date().getMonth() - dt.getMonth();
var diff_years = new Date().getFullYear() - dt.getFullYear();
var is_today = diff_years === 0 && diff_months === 0 && diff_days === 0;
var is_yesterday = diff_years === 0 && diff_months === 0 && diff_days === 1;
var is_tomorrow = diff_years === 0 && diff_months === 0 && diff_days === -1;
var is_in_the_last_7days = diff_years === 0 && diff_months === 0 && (diff_days > 1 && diff_days < 7);
var is_in_the_next_7days = diff_years === 0 && diff_months === 0 && (diff_days < -1 && diff_days > -7);
var is_same_year = diff_years === 0;
if(is_today){
return today_text;
}else if(is_yesterday) {
return yesterday_text;
}else if(is_tomorrow) {
return tomorrow_text;
}else if(is_in_the_last_7days) {
return dt.toLocaleString(language, in_the_last_7days_date_options);
}else if(is_in_the_next_7days) {
return dt.toLocaleString(language, in_the_next_7days_date_options);
}else if(is_same_year){
return dt.toLocaleString(language, same_year_date_options);
}else{
return dt.toLocaleString(language, far_date_options);
}
}
console.log(create_human_friendly_date(Date.now(), "Yesterday", "Today", "Tomorrow", "en")); // Today
console.log("***********************************");
console.log(create_human_friendly_date(Date.now() - (1000 * 3600 * 24 * 1), "Yesterday", "Today", "Tomorrow", "en")); // Yesterday
console.log(create_human_friendly_date(Date.now() - (1000 * 3600 * 24 * 2), "Yesterday", "Today", "Tomorrow", "en")); // 2 days ago
console.log(create_human_friendly_date(Date.now() - (1000 * 3600 * 24 * 10), "Yesterday", "Today", "Tomorrow", "en")); // 10 days ago
console.log(create_human_friendly_date(Date.now() - (1000 * 3600 * 24 * 900), "Yesterday", "Today", "Tomorrow", "en")); // Some years ago
console.log("***********************************");
console.log(create_human_friendly_date(Date.now() + (1000 * 3600 * 24 * 1), "Yesterday", "Today", "Tomorrow", "en")); // Tomorrow
console.log(create_human_friendly_date(Date.now() + (1000 * 3600 * 24 * 2), "Yesterday", "Today", "Tomorrow", "en")); // In 2 days
console.log(create_human_friendly_date(Date.now() + (1000 * 3600 * 24 * 10), "Yesterday", "Today", "Tomorrow", "en")); // In 10 days
console.log(create_human_friendly_date(Date.now() + (1000 * 3600 * 24 * 900), "Yesterday", "Today", "Tomorrow", "en")); // In some years
7 天前您也可以这样做:
export function isToday(date, now) {
const yearDate = date.getYear();
const monthDate = date.getMonth();
const dayDate = date.getDate();
const yearNow = now.getYear();
const monthNow = now.getMonth();
const dayNow = now.getDate();
if (yearDate === yearNow && monthDate === monthNow && dayDate ===
dayNow) {
return true
}
return false
}
这对我有用:
private _isSameDay(date1: Date, date2: Date): boolean {
return (
date1.getUTCFullYear() === date2.getUTCFullYear() &&
date1.getMonth() === date2.getMonth() &&
date1.getDate() === date2.getDate()
);
}
private _getSeparatorBody(date: Date): string {
if (this._isSameDay(date, new Date())) {
return 'Today';
}
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
if (this._isSameDay(date, yesterday)) {
return 'Yesterday';
}
return date.toISOString();
}
这对我有用。
const generatingDates = () => {
let dates = {
today: null,
yesterday: null,
oneDayBeforeYesterday: null,
twoDayBeforeYesterday: null,
threeDayBeforeYesterday: null,
fourDayBeforeYesterday: null,
fiveDayBeforeYesterday: null,
};
let keys = Object.keys(dates);
keys.map((x) => {
prev = null;
if (prev === null && dates[x] === null) {
dates[x] = new Date();
prev = dates[x];
} else if (value === null && prev !== null) {
dates[x] = prev;
}
});
return dates;
};
function findDay(date) {
let dateToCheck = new Date(date);
const datesDict = generatingDates();
// console.log(datesDict);
datesDict.yesterday.setDate(datesDict.yesterday.getDate() - 1);
datesDict.oneDayBeforeYesterday.setDate(datesDict.yesterday.getDate() - 1);
datesDict.twoDayBeforeYesterday.setDate(datesDict.yesterday.getDate() - 2);
datesDict.threeDayBeforeYesterday.setDate(datesDict.yesterday.getDate() - 3);
datesDict.fourDayBeforeYesterday.setDate(datesDict.yesterday.getDate() - 4);
datesDict.fiveDayBeforeYesterday.setDate(datesDict.yesterday.getDate() - 5);
let days = [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
];
if (dateToCheck.toDateString() === datesDict.today.toDateString()) {
return "Today";
} else if (
dateToCheck.toDateString() === datesDict.yesterday.toDateString()
) {
return "Yesterday";
} else if (
dateToCheck.toDateString() ===
datesDict.oneDayBeforeYesterday.toDateString()
) {
return days[date.getDay()];
} else if (
dateToCheck.toDateString() ===
datesDict.twoDayBeforeYesterday.toDateString()
) {
return days[date.getDay()];
} else if (
dateToCheck.toDateString() ===
datesDict.threeDayBeforeYesterday.toDateString()
) {
return days[date.getDay()];
} else if (
dateToCheck.toDateString() ===
datesDict.fourDayBeforeYesterday.toDateString()
) {
return days[date.getDay()];
} else if (
dateToCheck.toDateString() ===
datesDict.fiveDayBeforeYesterday.toDateString()
) {
return days[dateToCheck.getDay()];
} else {
return dateToCheck;
}
}
您可以使用此函数并将您的日期作为参数传递,它将返回星期几,7 天后它将返回给定日期。
function findDay(date) {
let dateToCheck = new Date(date);
const today = new Date();
const yesterday = new Date(today);
const oneDayBeforeYesterday = new Date(yesterday);
const twoDayBeforeYesterday = new Date(yesterday);
const threeDayBeforeYesterday = new Date(yesterday);
const fourDayBeforeYesterday = new Date(yesterday);
const fiveDayBeforeYesterday = new Date(yesterday);
yesterday.setDate(yesterday.getDate() - 1);
oneDayBeforeYesterday.setDate(yesterday.getDate() - 1);
twoDayBeforeYesterday.setDate(yesterday.getDate() - 2);
threeDayBeforeYesterday.setDate(yesterday.getDate() - 3);
fourDayBeforeYesterday.setDate(yesterday.getDate() - 4);
fiveDayBeforeYesterday.setDate(yesterday.getDate() - 5);
let days = [
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
];
if (dateToCheck.toDateString() === today.toDateString()) {
return "Today";
} else if (dateToCheck.toDateString() === yesterday.toDateString()) {
return "Yesterday";
} else if (dateToCheck.toDateString() === oneDayBeforeYesterday.toDateString()) {
return days[date.getDay()];
} else if (dateToCheck.toDateString() === twoDayBeforeYesterday.toDateString()) {
return days[date.getDay()];
} else if (dateToCheck.toDateString() === threeDayBeforeYesterday.toDateString()) {
return days[date.getDay()];
} else if (dateToCheck.toDateString() === fourDayBeforeYesterday.toDateString()) {
return days[date.getDay()];
} else if (dateToCheck.toDateString() === fiveDayBeforeYesterday.toDateString()) {
return days[dateToCheck.getDay()];
} else {
return dateToCheck;
}
}
console.log(findDay("07-10-2020"));
检查日期是否是今天的函数
function isToday(date) {
const today = new Date();
return date.getDate() === today.getDate() &&
date.getMonth() === today.getMonth() &&
date.getFullYear() === today.getFullYear();
}
检查日期是否是昨天的日期的函数
function isYesterday(date) {
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
return date.getDate() === yesterday.getDate() &&
date.getMonth() === yesterday.getMonth() &&
date.getFullYear() === yesterday.getFullYear();
}
检查日期是否是明天的功能
function isTomorrow(date) {
const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1);
return date.getDate() === tomorrow.getDate() &&
date.getMonth() === tomorrow.getMonth() &&
date.getFullYear() === tomorrow.getFullYear();
}
使用示例
const inputDate = new Date('2024-02-19');
if (isToday(inputDate)) {
console.log("The date is today.");
} else if (isYesterday(inputDate)) {
console.log("The date is yesterday.");
} else if (isTomorrow(inputDate)) {
console.log("The date is tomorrow.");
} else {
console.log("The date is neither today, yesterday, nor tomorrow.");
}
您可以使用两个日期之间的日期差异,如果有负值,它将返回天数差异
var date1 = new Date("12/15/2010");
var date2 = new Date("12/14/2010");
var timeDiff = date2.getTime() - date1.getTime();
var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24));
if(diffDays == -1){ alert("Yesterday")}