Dev Blog

스크립트 & 소스코드 공유

실무에서 유용하게 쓰는 스크립트와 코드 조각을 블로그 게시판으로 저장하고 공유합니다.

총 110건의 글

PHP strtotime·date로 이번 달·지난 달·다음 달 날짜 구하기

PHP의 strtotime과 date 함수로 이번 달, 지난 달, 다음 달의 시작일과 말일을 구하는 방법이다. 월 첫날에 한 달을 더하고 하루를 빼는 방식으로 말일을 계산하며, date()가 2014-02-01 같은 값이나 2014-13-01 같은 잘못된 월을 자동 보정하는 특징을 활용한다. 연말 12월 처리와 예제 코드를 함께 담고 있다.

因为工作需要需要获取上个月、下个月、本月的日期,特从网站找到了实现代码,特分享下,方便需要的朋友

今天写程序的时候,突然发现了很早以前写的获取月份天数的函数,经典的switch版,但是获得上月天数的时候,我只是把月份-1了,估计当时太困了吧,再看到有种毛骨悚然的感觉,本来是想再处理一下的,但是一想肯定还有什么超方便的方法,于是找到了下面这个版本,做了一点小修改。

获取本月日期:

复制代码 代码如下:

function getMonth($date){
$firstday = date("Y-m-01",strtotime($date));
$lastday = date("Y-m-d",strtotime("$firstday +1 month -1 day"));
return array($firstday,$lastday);
}

$firstday是月份的第一天,假如$date是2014-2这样的话,$firstday就会是2014-02-01,然后根据$firstday加一个月就是2014-03-01,再减一天就是2014-02-28,用date()和strtotime()真是太方便了。

获取上月日期:

复制代码 代码如下:

function getlastMonthDays($date){
$timestamp=strtotime($date);
$firstday=date('Y-m-01',strtotime(date('Y',$timestamp).'-'.(date('m',$timestamp)-1).'-01'));
$lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
return array($firstday,$lastday);
}

上月日期需要先获取一个时间戳,然后在月份上-1就OK了,超智能的date()会把2014-0-1这种东西转换成2013-12-01,太爽了。

获取下月日期:

复制代码 代码如下:

function getNextMonthDays($date){
$timestamp=strtotime($date);
$arr=getdate($timestamp);
if($arr['mon'] == 12){
$year=$arr['year'] +1;
$month=$arr['mon'] -11;
$firstday=$year.'-0'.$month.'-01';
$lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
}else{
$firstday=date('Y-m-01',strtotime(date('Y',$timestamp).'-'.(date('m',$timestamp)+1).'-01'));
$lastday=date('Y-m-d',strtotime("$firstday +1 month -1 day"));
}
return array($firstday,$lastday);
}

下月日期的代码看起来比较长一点,因为date()转不了类似2014-13-01这种东西,它会直接回到1970,所以前面需要处理一下12月的问题,除了12月就直接月份+1就OK啦。

总得来说,还是很方便的,日期函数太强大了

PHP 엑셀 다운로드 시 숫자 앞자리 0이 사라지지 않게 하기

PHP에서 웹페이지 데이터를 엑셀 형식으로 내보낼 때 셀의 앞자리 0(예: 010...)이 사라지는 문제를 해결하는 방법이다. MIME 타입을 application/vnd.ms-excel로 설정하고, 데이터를 감싸는 td 태그에 vnd.ms-excel.numberformat:@ 스타일을 지정하면 셀이 텍스트 형식으로 출력되어 0이 유지된다. 날짜·숫자·통화·퍼센트 형식도 정리했다.

“首先,我们了解一下excel从web页面上导出的原理。

当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,

所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。

这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。

下面就列出常用的一些格式:

1) 文本:vnd.ms-excel.numberformat:@

2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd

3) 数字:vnd.ms-excel.numberformat:#,##0.00

4) 货币:vnd.ms-excel.numberformat:¥#,##0.00

5) 百分比:vnd.ms-excel.numberformat: #0.00%

这些格式你也可以自定义,比如年月你可以定义为:yy-mm等等。

那么知道了这些格式,怎么去把这些格式添加到cell中呢?很简单,我们只需要把样式添加到对应的标签对(即闭合标签)即可。

如,给标签对添加样式,如下:<td style="vnd.ms-excel.numberformat:@">410522198402161833</td>

phpMyAdmin으로 MySQL 데이터베이스 테이블 일괄 삭제하기

PHP 스크립트를 이용해 특정 접두어(v9_)가 붙은 MySQL 테이블을 한 번에 삭제하는 방법이다. 데이터베이스에 연결해 show tables로 전체 테이블을 조회한 뒤, 접두어가 일치하는 테이블만 drop table로 삭제하고 결과를 출력한다. 실행 전 반드시 데이터베이스 전체를 백업할 것을 권장한다.

使用这个方法前,强烈建议先备份整个数据库。至于怎么备份?你不会么?在本文下方留言吧。

具体方法:复制下面的php执行语句,保存为sql.php文件(注意配置数据库名称、密码、数据表头),通过ftp上传到网站跟目录,运行。

<?php
//设置数据库连接信息。数据库服务器地址,数据库用户名,数据密码
mysql_connect('localhost','root','123456');
//设置查询的数据库名称,比如CMSYOU当前设置的是phpcms
mysql_select_db('phpcms');
$rs=mysql_query('show tables');
while($arr=mysql_fetch_array($rs))
{
//设置要批量删除的数据库表前缀,如:v9_
$TF=strpos($arr[0],'v9_');
if($TF===0){
$FT=mysql_query("drop table $arr[0]");
if($FT){
echo "$arr[0] 删除成功!<br>";
}
}
}
?>

순수 CSS로 radio·checkbox 스타일 예쁘게 꾸미기

JavaScript 없이 순수 CSS만으로 라디오 버튼과 체크박스를 예쁘게 스타일링하는 방법이다. 기본 input을 숨기고 label과 가상 요소(::before, ::after)를 활용해 커스텀 UI를 구성하며, 체크 상태에 따라 색상과 모양이 바뀌도록 하는 CSS와 HTML 구조 예제를 제공한다.

css

/* 체크박스 스타일시트 */
.ck_style{margin:0 10px 0 0;display:inline-block;}
.ck_style input[type="radio"] , .ck_style input[type="checkbox"]{display:none}
.ck_style i{background-color:#fff;border:1px solid rgba(0,0,0,0.15);border-radius:100%;display:inline-block;height:18px;margin-right:6px;margin-top:-1px;vertical-align:middle;width:18px;line-height:1}
.ck_style input[type="radio"]:checked + i:after{background-color:#2fa2dd;border-radius:100%;content:"";display:inline-block;height:12px;margin:2px;width:12px}
.ck_style input[type="checkbox"] + i{border-radius:0}
.ck_style input[type="checkbox"]:checked + i:after{background-color:#2fa2dd;border-radius:0;content:"";display:inline-block;height:12px;margin:2px;width:12px}

HTML

<label class="ck_style"><input type="radio" name="demo-radio"><i></i> 여</label>
<label class="ck_style"><input type="radio" name="demo-radio"><i></i>부</label>

<label class="ck_style"><input type="checkbox" name="demo-radio"><i></i> 기술이전</label>
<label class="ck_style"><input type="checkbox" name="demo-radio"><i></i> 공동연구</label>
<label class="ck_style"><input type="checkbox" name="demo-radio"><i></i> 위탁연구</label>
<label class="ck_style"><input type="checkbox" name="demo-radio"><i></i> 가족기업</label>

PHP 엑셀 다운로드 시 셀 서식(mso-number-format) 지정하기

PHP로 데이터를 엑셀 파일로 저장할 때 핸드폰 번호 앞자리 0이 사라지는 문제를 해결하는 방법이다. 출력하는 td 태그의 style에 mso-number-format을 지정해 텍스트(\@) 형식으로 강제하고, 날짜·숫자·소수점·퍼센트·통화·과학 표기법 등 다양한 셀 서식 형식도 정리했다.

이벤트 참가자 정보를 엑셀로 저장하는데 핸드폰 번호 '010...' 가 숫자로 출력되니 '10...' 로 나온다.

원래대로 '010...' 으로 나오게 하려면 숫자가 아닌 텍스트로 출력해야 한다.

셀 서식 지정할 때는 데이터 출력하는 html의 style에 MSO FORMAT을 지정하면 된다.

header("Content-type: application/vnd.ms-excel; charset=UTF-8");
header("Content-Disposition: attachment; filename = userIdentify".date("YmdHis").".xls");
header("Content-Description: PHP5 Generated Data");
header("Cache-Control: no-cache");
header("Pragma: no-cache");

// DB커넥션 파일(PDO)
require_once($_SERVER['DOCUMENT_ROOT'].'/Connection/dbconnect.php');

// 검색 조건 설정
...(생략)

// 데이터 조회
...(생략)

?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
th,td{border:0.6px solid #666;}
th{background-color: yellow;}
</style>
</head>
<body>
<h3>Table</h3>
<table>
<tr>
<th>이름</th>
<th>전화번호</th>
</tr>
<? while($rows=$stmt->fetch(PDO::FETCH_ASSOC)){ ?>
<tr>
<td><?=$rows['userName']?></td>
<!--셀 서식을 Text로 지정-->
<td style="mso-number-format:'\@'"><?=$rows['userPhone']?></td>
</tr>
<? } ?>
</table>
</body>
</html>

검색해 보면 다른 타입도 많이 나온다. 그러나 실제 사용하는 건 텍스트 형식(\@) 정도인 듯 하다.

(텍스트로 지정 하면 데이터 출력하는 그대로 나온다.)

mso-number-format:"\@"

Text // 텍스트

mso-number-format:"0"

NO Decimals // 소수점 없음

mso-number-format:"0.000"

3 Decimals // 소수점 3자리까지

mso-number-format:"#\,##0.000"

Comma with 3 dec // 숫자 자릿수 구분(,)+소수점 3자리

mso-number-format:"mm\/dd\/yy"

월/일/연도 형식 (05/15/16)

mso-number-format:"mmmm\ d\,\ yyyy"

'mmmm' 하면 월을 영문으로 표시한다. (January 1,2016)

mso-number-format:"d-mmm-yyyy"

01-mar-1998 형식. 월 표기가 다르다.

mso-number-format:"Short Date"

01/03/1998 형식. 간단하게 지정

mso-number-format:"Medium Date"

01-mar-98

mso-number-format:"m\/d\/yy\ h\:mm\ AM\/PM"

날짜 + 시간을 AM/PM으로 구분해서 표시

mso-number-format:"Short Time"

5:16 // 시간만 간단하게

mso-number-format:"Medium Time"

5:16 am

mso-number-format:"Long Time"

5:16:21:00 // 밀리 초(ms) 단위까지

mso-number-format:"Percent"

Percent - two decimals // 퍼센트 기호 + 소수점 2자리까지

mso-number-format:"0%"

Percent - no decimals // 소수점 없는 퍼센트

mso-number-format:"0.E+00"

Scientific Notation // 엑셀에서 숫자 자릿수가 매우 클 때 줄여서 표시되는 그 형식..

mso-number-format:"#\ ???\/???"

Fractions - up to 3 digits (312/943) , 분수형식

mso-number-format:"\0022£\0022#\,##0.00"

£12.76 // 영국 파운드 기호로 통화 표시(원화 표시는 없을까?)

mso-number-format:"#\,##0.00_ \;[Red]-#\,##0.00\ "

2 decimals, negative numbers in red and signed(1.56 -1.56) // 음수는 색깔을 따르게 표시



Let's create something great together.

프로젝트 문의 및 견적 요청은 언제든 환영합니다.