怎样取得指定日期的前N天
假如,我要取某个时间的前N天.比如 20060904的 5天 前,这应该是 20060830
有什么方法可以取得这个时间呢?
欢迎大家一起讨论.
方法不限. 我想到的一种方法是利用mysql的函数.
用到了msyql的date_format()和date_add()或date_sub()
select date_format(date_add($inputdate,interval $i day),'%Y%m%d');
注意到,这里用了$inputdate表示基日期.$i表示要得到的天数,要想得到前N天,就要在前面加个-号.
表示在$inputdate的基础上加$i天.
select date_format(date_sub($inputdate,interval $i day),'%Y%m%d');
使用date_sub时,$i不用-号,就可以表示取的是前$i天.加了-号就表示取后$i天了.
表示在$inputdate基础上减$i天.
看下运行情况:
mysql> select date_format(date_add(20060904,interval 5 day),'%Y%m%d');
+---------------------------------------------------------+
| date_format(date_add(20060904,interval 5 day),'%Y%m%d') |
+---------------------------------------------------------+
| 20060909 |
+---------------------------------------------------------+
1 row in set (0.01 sec)
mysql> select date_format(date_add(20060904,interval -5 day),'%Y%m%d');
+----------------------------------------------------------+
| date_format(date_add(20060904,interval -5 day),'%Y%m%d') |
+----------------------------------------------------------+
| 20060830 |
+----------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select date_format(date_sub(20060904,interval 5 day),'%Y%m%d');
+---------------------------------------------------------+
| date_format(date_sub(20060904,interval 5 day),'%Y%m%d') |
+---------------------------------------------------------+
| 20060830 |
+---------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select date_format(date_sub(20060904,interval -5 day),'%Y%m%d');
+----------------------------------------------------------+
| date_format(date_sub(20060904,interval -5 day),'%Y%m%d') |
+----------------------------------------------------------+
| 20060909 |
+----------------------------------------------------------+
1 row in set (0.00 sec)
好方法。
不过如果不用mysql怎么办?
腾讯现在还在用mysql呀~~ 原来MYSQL还有这样的函数!
平时只用 select insert update ,看来得再好好学习,天天向上了!
方法有了,不用MYSQL,其它数据厍也应该会有相应的函数的.
楼上说腾讯现在还在用mysql呀~~ ,hjack用就行啦!呵呵~ try another way.... 最笨最原始的方法是记录各个月的天数。。。 用java实现:
使用了java.sql.Date类.
int N = 5;
String date = "2006-9-4";
System.out.println(new Date(Date.valueOf(date).getTime()-N*24*60*60*1000));
运行结果:2006-08-30 java.util.Date可以实现所有关于日期的计算... 原帖由 wool王 于 2006-9-10 21:52 发表
java.util.Date可以实现所有关于日期的计算...
write one .:time::time: 又授教啦~~
收藏起来哈哈 毕业设计时接触了一下php.但不熟.用php写了一下.见笑了.
<?php
$date='2006-09-04';
list($year,$month,$day)=split('-',$date);
$N=5;
echo date('Y-m-d',mktime(0,0,0,$month,$day,$year)-$N*24*60*60);
?>
运行结果:2006-08-30 都是斑竹们在讨论呀 这样啊?
我用java来实现吧
1.把字符串“2006-09-04”转换成long形
public static long stringToLong(String str) throws ParseException {
DateFormat df = DateFormat.getDateInstance();
date = df.parse(str);
return date.getTime();
}
2.得到了long形格式的时间后分别计算出年,月,日
public static int getYear(long timeLong) {
date = new Date(timeLong);
GregorianCalendar today = new GregorianCalendar();
today.setTime(date);
year = today.get(1);
return year;
}
public static int getMonth(long timeLong) {
date = new Date(timeLong);
GregorianCalendar today = new GregorianCalendar();
today.setTime(date);
mon = today.get(2);
return mon;
}
public static int getDay(long timeLong) {
date = new Date(timeLong);
GregorianCalendar today = new GregorianCalendar();
today.setTime(date);
day = today.get(5);
return day;
}
3.得到了年,月,日然后就计算N天前的日期啦。
public static long getDayBeforeN(long nowLong,int n){
GregorianCalendar moncal = new GregorianCalendar(this.getYear(nowLong),this.getMonth(long nowLong), this.getDay(nowLong)-n);
long day= moncal.getTimeInMillis();
return day;
}
4.再把上面得到的时间转换为String
public static String longToString(long nowLong) {
DateFormat df = DateFormat.getDateInstance();
String nowString = df.format(Long.valueOf(nowLong));
return nowString;
} 当然可以这个可以计算任何日期任何天之前的日期
如:我要计算2006-05-01 10天前的日期
public static void main(String args[]) throws ParseException {
String now="2006-05-01 ";
int n=10;
long nowLong=this.stringToLong(now);
System.out.println(this.longToString(this.getDayBeforeN(this.stringToLong(now),n)));
} 发现论坛好冷清啊,首页居然有10多天前的帖子。 编程版是这样的了。。。
有技术的没时间,没技术的也没时间。。。 谁可以说说bash下的实现方法..
页:
[1]