Dev Blog

스크립트 & 소스코드 공유

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

4건의 글

jQuery animate로 숫자 카운팅 업 애니메이션 만들기

jQuery의 animate 메서드로 숫자가 0부터 목표값까지 올라가는 카운팅 업 애니메이션 예제다. .count 요소마다 Counter 속성값을 요소의 텍스트까지 4초 동안 애니메이션하고, step 콜백에서 Math.ceil과 toLocaleString으로 천 단위 구분자가 있는 정수로 표시한다. HTML·CSS·JS 전체 코드를 제공한다.

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Animated Number Counting Up Example</title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</head>
<style>
.header { margin-top: 150px; text-align: center; }
.header h1{
text-align: center;
font-size: 50px;
margin: 0;
font-family: 'Inter';
}
.counter-flex {
display: flex;
align-items: center;
justify-content: center;
min-height: 600px;
}
.counter-box {
width: 350px;
}
.counter-box h2 {
font-size: 70px;
text-align: center;
font-family: 'Inter';
margin: 0;
}
.counter-box p{
text-align: center;
font-family: arial;
}
</style>
<body>
<div class="counter-flex">
<div class="counter-box">
<h2><span class="count">7000</span></h2>
<p>
Veterans Served<br />
Annually
</p>
</div>
<div class="counter-box">
<h2><span class="count">10000</span></h2>
<p>Lorem Ipsum</p>
</div>
<div class="counter-box">
<h2><span class="count">30000</span></h2>
<p>Lorem Ipsum</p>
</div>
<div class="counter-box">
<h2><span class="count">100000</span></h2>
<p>Lorem Ipsum</p>
</div>
</div>

<script>
$(".count").each(function () {
$(this).prop("Counter", 0).animate({
Counter: $(this).text(),
},{
duration: 4000,
easing: "swing",
step: function (now) {
now = Number(Math.ceil(now)).toLocaleString('en');
$(this).text(now);
},
});
});
</script>
</body>
</html>

PHP 숫자 앞자리 0 채우기 - str_pad와 sprintf 두 가지 방법

PHP에서 숫자 앞에 0을 채우는 두 가지 방법을 소개한다. str_pad는 원하는 문자로 문자열을 왼쪽(STR_PAD_LEFT)·오른쪽·양쪽에 채울 수 있고, sprintf는 %02d 형식 지정자로 왼쪽에 0을 채우거나 소수점 이하 자릿수를 보정하는 데 유용하다. 두 함수의 특징과 사용 예제를 비교해 정리했다.

顾名思义这个函数是针对字符串来说的这个可以对指定的字符串填补任何其它的字符串

例如:str_pad(带填补的字符串,填补后的长度,填补字符串,填补位置)

其中填补后的长度必须是个正整数,填补位置有三个选项,

左边:STR_PAD_LEFT

右边:STR_PAD_RIGHT

两端:STR_PAD_BOTH

echo str_pad(1,8,"0",STR_PAD_LEFT);
//结果:00000001

echo str_pad(1,8,"0",STR_PAD_RIGHT);
//结果:10000000

echo str_pad(1,8,"0",STR_PAD_BOTH);
//结果:00010000

在上边的例子中值得注意的一个细节是,如果填补的位数是个奇数,例如例三中填补了7个0,右边优先。

再看补零的另外一种方法sprintf

这个函数学过c的都十分了解它,呵呵……

不过咱不说这么多,因为用起来实在太灵活了,以至于我基本不会用,不过在左边补零(或者在小数点后补零)用起来还是很方便的

先看左边补零

echo sprintf("%05d",1);
//先说%05d的意思,用一个5位数的数字格式化后边的参数,如果不足5位就补零
//运行结果是00005

再看小数点后补零

echo sprintf("%01.3f",1);
//%01.3f的意思是说,用一个小数点后最少三位不足三位补零,小数点前最少一位,不足一位补零的浮点数格式化后边的参数
//其运行结果是:1.000

关于补零的这两种方法大家可以挑选着使用,其实各有优劣,sprintf能够保证你不至于误操作吧1补成1000000哈哈,str_pad可以保证你想补啥补啥。

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>

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.

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