Reactjs 如何从自定义日期获取周/日/小时/分钟前的信息&;时间“;“从现在起”;在中国?

Reactjs 如何从自定义日期获取周/日/小时/分钟前的信息&;时间“;“从现在起”;在中国?,reactjs,react-native,react-native-android,Reactjs,React Native,React Native Android,我有一个日期和时间格式:2019-11-2509:49:19。我们如何将其与当前日期和时间进行比较,并显示如下内容:3天前或周/小时/分钟前您可以使用moment.js库 您可以使用npm的npm i moment软件包,并按如下方式使用diff功能: moment.duration(nowmonent.diff(updateMoment)).as(“小时”) 差异可以用天、小时或分钟来计算。目前,您可以使用时刻来解决您的问题。但我也为您提供了一些VainillaJS代码来解决您的问题 cons

我有一个日期和时间格式:
2019-11-2509:49:19
。我们如何将其与当前日期和时间进行比较,并显示如下内容:
3天前
周/小时/分钟前
您可以使用
moment.js


您可以使用npm的
npm i moment
软件包,并按如下方式使用diff功能:
moment.duration(nowmonent.diff(updateMoment)).as(“小时”)


差异可以用天、小时或分钟来计算。

目前,您可以使用
时刻
来解决您的问题。但我也为您提供了一些VainillaJS代码来解决您的问题

const DAYS_OF_WEEK = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
const MONTHS_OF_YEAR = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

const daysBetween = (date1, date2) => {
  const ONE_DAY_ON_SECONDS = 1000 * 60 * 60 * 24;
  const date1Ms = date1.getTime();
  const date2Ms = date2.getTime();

  const differenceMs = date2Ms - date1Ms;
  return Math.round(differenceMs / ONE_DAY_ON_SECONDS); 
}

const getHoursFromDate = (date) => {
  var hours = date.getHours();
  var minutes = date.getMinutes();
  var ampm = hours >= 12 ? 'pm' : 'am';
  hours = hours % 12;
  hours = hours ? hours : 12; // the hour '0' should be '12'
  minutes = minutes < 10 ? '0' + minutes : minutes;
  return hours + ':' + minutes + ' ' + ampm;
}

const dateFromNow = (date) => {
  const currentDate = new Date();

  if(date.getUTCDate() === currentDate.getUTCDate() && date.getUTCMonth() === currentDate.getUTCMonth() && date.getUTCFullYear() === currentDate.getUTCFullYear()) {
    const hours = Math.floor(Math.abs(date - currentDate) / 36e5);

    if (hours === 0) {
      const minutes = Math.round(((Math.abs(date - currentDate) % 86400000) % 3600000) / 60000);
      return minutes <= 1 ? 'A while ago' : `${minutes} minutes ago.`
    } else {
      return `${Math.floor(hours)} hours ago`;
    }
  } else {
    if (date.getUTCFullYear() < currentDate.getUTCFullYear() || daysBetween(date, currentDate) > 6) {
      return `${date.getDate()}/${MONTHS_OF_YEAR[date.getMonth()]} /${date.getFullYear()}`;
    } else {
      return `${DAYS_OF_WEEK[date.getDay()]} at ${getHoursFromDate(date)}`;
    }
  }
}
const DAYS OF_WEEK=[“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”];
每年的常量月份=[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月];
const daysBetween=(日期1,日期2)=>{
一天一秒的常数=1000*60*60*24;
const date1Ms=date1.getTime();
const date2Ms=date2.getTime();
常数差=日期2ms-日期1ms;
返回数学圆(差分/一天/秒);
}
const getHoursFromDate=(日期)=>{
var hours=date.getHours();
var minutes=date.getMinutes();
var ampm=小时数>=12?“下午”:“上午”;
小时数=小时数%12;
小时数=小时数?小时数:12;//小时数“0”应为“12”
分钟=分钟<10?'0'+分钟:分钟;
返回时间+':'+分钟+'+安培;
}
const dateFromNow=(日期)=>{
const currentDate=新日期();
如果(date.getUTCDate()==currentDate.getUTCDate()&&date.getUTCMonth()==currentDate.getUTCMonth()&&date.getUTCFullYear()==currentDate.getUTCFullYear()){
恒时=数学楼层(数学abs(日期-当前日期)/36e5);
如果(小时==0){
const minutes=Math.round((Math.abs(日期-当前日期)%86400000)%3600000)/60000);
返回(第6分钟){
返回`${date.getDate()}/${MONTHS\u OF_YEAR[date.getMonth()]}/${date.getFullYear()}`;
}否则{
在${getHoursFromDate(date)}处返回${DAYS}周[date.getDay()]};
}
}
}

https://momentjs.com/docs/#/get-设置/天/

  • 如果超出该范围,它将持续数周
moment().day(-7);//上周日(0-7)
矩()日(0);//本周日(0)
矩().天(7);//下个星期天(0+7)
第(10)天;//下周三(3+7)
从现在起的3个星期三(3+7+7+7)
  • 根据区域设置获取或设置星期几
如果区域设置将星期一指定为一周的第一天,则矩()。工作日(0)将是星期一。如果星期日是一周的第一天,则矩()。工作日(0)将是星期日

与“时刻日”一样,如果超出该范围,它将持续数周。
//星期一是一周的第一天
矩().工作日(-7);//上周一
星期一(7);//下星期一
//星期天是一周的第一天
矩().工作日(-7);//上周日
星期一(7);//下星期天

经过多次追踪,我找到了确切的解决方案:

time.utc(“2019-12-04 12:00:24”).local().startOf('seconds').fromNow()

输出:


30分钟前、1小时前、2周前

这是我在应用程序中使用的函数。不需要任何库

export const findDaysDiffrent = (fromDate) => {

let CreatedDate = new Date(fromDate)
let today = new Date()
let requiredDiffrentDays

const oneDay = 24 * 60 * 60 * 1000;
const diffDays = Math.round(Math.abs((CreatedDate - today) / oneDay));

if (diffDays >= 360) {
    requiredDiffrentDays = Math.floor(diffDays / 360) == 1 ? `${Math.floor(diffDays / 365)} year ago` : `${Math.floor(diffDays / 365)} years ago`
} else if (diffDays >= 30) {
    requiredDiffrentDays = Math.floor(diffDays / 30) == 1 ? `${Math.floor(diffDays / 30)} month ago` : `${Math.floor(diffDays / 30)} months ago`
} else if (diffDays < 30) {
    requiredDiffrentDays = (diffDays == 1 || diffDays == 0) ? `${diffDays} day ago` : `${diffDays} days ago`
}

return requiredDiffrentDays;
export const finddaysdifferent=(fromDate)=>{
让CreatedDate=新日期(fromDate)
let today=新日期()
让我们分开几天吧
const one day=24*60*60*1000;
const diffDays=Math.round(Math.abs((CreatedDate-today)/oneDay));
如果(diffDays>=360){
requiredDiffrentDays=Math.floor(diffDays/360)=1?`Math.floor(diffDays/365)}年前`:`Math.floor(diffDays/365)}年前``
}否则如果(diffDays>=30){
requiredDiffrentDays=Math.floor(diffDays/30)=1?`Math.floor(diffDays/30)}个月前`:`Math.floor(diffDays/30)}个月前``
}否则如果(天数<30天){
requiredDiffrentDays=(diffDays==1 | | diffDays==0)?“${diffDays}天前”:“${diffDays}天前`
}
返回所需的天数不限;

}

它只从我YYYYMMDD的日期返回。我需要带日期和时间的日期和时间。好吧,moment.js不支持这种需要,但也许你可以使用
日历时间
,像
今天凌晨2:30那样显示它
@LuvnishMongaI感谢你的回答,但要求是:10分钟前/4小时前/1天前/2周前。试试吧,谢谢而且很简单。我使用的是划时代,所以只能将
utc
替换为
unix
export const findDaysDiffrent = (fromDate) => {

let CreatedDate = new Date(fromDate)
let today = new Date()
let requiredDiffrentDays

const oneDay = 24 * 60 * 60 * 1000;
const diffDays = Math.round(Math.abs((CreatedDate - today) / oneDay));

if (diffDays >= 360) {
    requiredDiffrentDays = Math.floor(diffDays / 360) == 1 ? `${Math.floor(diffDays / 365)} year ago` : `${Math.floor(diffDays / 365)} years ago`
} else if (diffDays >= 30) {
    requiredDiffrentDays = Math.floor(diffDays / 30) == 1 ? `${Math.floor(diffDays / 30)} month ago` : `${Math.floor(diffDays / 30)} months ago`
} else if (diffDays < 30) {
    requiredDiffrentDays = (diffDays == 1 || diffDays == 0) ? `${diffDays} day ago` : `${diffDays} days ago`
}

return requiredDiffrentDays;