您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

javascript - 关于计算日期差

2024/3/3 19:51:48发布16次查看
背景:我用php计算从今天起,推迟三个月(三个月不一定是90天,比如从今天的11月30号,推迟三个月就是2月的28号)的日期。java端说他们很好得到这三个月的日期。
疑惑:计算两个时间之间的日期差我知道,但是计算三个月的我不会。我现在的做法是这样:
echo floor((strtotime('+3 month') - strtotime(date('y-m-d')))/86400);

求解:如何用php和javascript计算真实日期差。
回复内容: 背景:我用php计算从今天起,推迟三个月(三个月不一定是90天,比如从今天的11月30号,推迟三个月就是2月的28号)的日期。java端说他们很好得到这三个月的日期。
疑惑:计算两个时间之间的日期差我知道,但是计算三个月的我不会。我现在的做法是这样:
echo floor((strtotime('+3 month') - strtotime(date('y-m-d')))/86400);

求解:如何用php和javascript计算真实日期差。
moment ( 一款js时间框架 )
文档地址:http://momentjs.com/#relative-time
jsmoment(20111031, yyyymmdd).fromnow(); // 4 years agomoment(20120620, yyyymmdd).fromnow(); // 3 years agomoment().startof('day').fromnow(); // 15 hours agomoment().endof('day').fromnow(); // in 9 hoursmoment().startof('hour'
其他使用方式
jsvar date1 = moment('2015-01-01')var date2 = moment('2000-01-01')date1.diff(date2) // 473385600000date1.from(date2) // in 15 years
carbon 可能是 php 中时间处理最好的轮子了:http://carbon.nesbot.com/docs/#api-difference
javascript// 之前项目里用到的实现方式var f = function (date, diff) { var day; if (typeof date == 'string') { // yyyy-mm-dd 不是合法的格式 date = date.replace(/-/g, '/'); } date = new date(date); day = date.getdate(); diff = ~~diff || 0; date.setmonth(date.getmonth() + diff); // 天数超出目标月的最大天数时,会顺延到下个月 // 然后设置下个月的第零天,重置到目标月的最后一天 if (date.getdate() != day) { date.setdate(0); } return date;}f('2014/11/30', 3);
js 版本,
var d = new date();d.setmonth(d.getmonth() + 3);
我记得php里面有一个很好用的时间函数,可以直接加月份的,php操作时间最为简单的,普通地加3 month就好
simpledateformat sdf=new simpledateformat(yyyy-mm-dd); date date=new date(); string datestring=sdf.format(date); date.setmonth(date.getmonth()+10); string datestring1=sdf.format(date);
======结果=====
2015-06-10 :2016-04-10
这个就要对比php和java的算法了,php端是这样理解+n month的
/** * @var $days int 总计天数 * @var $year int 当前年 * @var $month int 当前月 */$days = 0; $year = 2015; $month = 3;/** * @var $n int 几个月 */for ($i = 0; $i
但是我不知道java是不是这样算的,不过逻辑一分析明白了楼主应该理解js端怎么搞了吧。
例 date('y-m-d', strtotime('2015-01-30 +1 month') === date('y-m-d', strtotime('2015-01-30 +31 days') 是3月2号
你的代码改良一下,话说这样还不够简单吗?
echo floor((strtotime('+3 month') - time())/86400);
这个有点扯蛋吧,如果今天是2月28日,java能计算出三个月以后的今天是5月30日,那5月28号怎么办?没有那个语言这么智能。
你想要这种结果(基于当前日期离下一个月1号的距离) ,php也是可以做到的。
echo date('y-m-d',strtotime('last day of +3 month')-(strtotime('last day of this month')-strtotime('today')));
先计算这个月离下个月1号的距离,然后在当前月底加上3个月,减去这个距离。
显然这个是任何语言都能实现的。
phpdate('y-m-d',strtotime('-3 months'));
问题没看明白,是要「今天」推迟3个月的时间吗?
如果只要是推迟3个月是几号:
phpdate('d',strtotime('-3 months'));
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product