博文

目前显示的是 四月, 2020的博文

PHP8 —— New String Helpers

新增了三个字符串函数,str_starts_with, str_ends_with, str_contains, PHP 的函数这么方便,很难想象竟然一直没有这几个。 str_starts_with 判断字符串是否以另一个字符串开头,在PHP7以及之前 $id = 'inv_abcdefgh'; $result = strpos($id, 'inv_') === 0; var_dump($result); // true PHP8 中可以直接这么写 $result = str_starts_with($id, 'inv_'); str_ends_with 判断字符串是否以另外一个字符串结尾,在 PHP7 及之前,比较麻烦,通常是这么写 $id = 'abcd_inv'; $result = strpos(strrev($id), strrev('_inv')) === 0; 或者 $result = substr($id, -1 * strlen('_inv')) === '_inv'; 或者上正则吧 $result = preg_match('/_inv$/', $id) === 1; 看起来都是比较麻烦的。PHP8 里面可以简化成下面这样了 $id = 'abcd_inv'; $result = str_ends_with($id, '_ind'); str_contains 字符串包含,PHP8 之前一般就是 strpos 来实现了 $url = 'https://example?for=bar'; $result = strpos($url, '?') !== FALSE; PHP8 就直接一点 $result = str_contains($url, '?');

如何获取两个日期之间的所有日期?

简介 Java 8 加入的新 Time Api可以方便的处理日期,我们不再需要引入额外的库。 本文对比一下不同版本的 Java 如何获取两个日期之间所有的日期。 Java 7 在 Java 7中,我们一般使用一个循环,使用add 方法 对 Calendar实例使用 add(Calendar.Date,1) ,直到满足条件为之。代码示例如下: public static List<Date> getDatesBetweenUsingJava7( Date startDate, Date endDate) { List<Date> datesInRange = new ArrayList<>(); Calendar calendar = new GregorianCalendar(); calendar.setTime(startDate); Calendar endCalendar = new GregorianCalendar(); endCalendar.setTime(endDate); while (calendar.before(endCalendar)) { Date result = calendar.getTime(); datesInRange.add(result); calendar.add(Calendar.DATE, 1); } return datesInRange; } Java 8 在 Java 8 中,我们可以创建一个无限的 Stream,然后取需要的部分。但是需要在满足条件时结束这个无限Stream, Java 8 语言层面没有提供直接的方法(Java 9 开始有了 takeWhile 和 dropWhile),所以我们需要提前计算日期的个数,然后使用limit()来终止Stream。 public static List<LocalDate> getDatesBetweenUsingJava8( LocalDate startDate, LocalDate endDate) { long numOfD