2009年8月15日 星期六

CSS Position Fixed for IE6

CSS Position Fixed for IE6
修正IE6不支持position:fixed的bug

/* 除了IE6的主流瀏覽器通用的方法 */
.fixed-top /* 頭部固定 */{position:fixed;bottom:auto;top:0px;}
.fixed-bottom /* 底部固定 */{position:fixed;bottom:0px;top:auto;}
.fixed-left /* 左側固定 */{position:fixed;right:auto;left:0px;}
.fixed-right /* 右側固定 */{position:fixed;right:0px;left:auto;}



/*讓position:fixed在IE6下可用! */
* html,* html body /* 修正IE6振動bug */{background-image:url(about:blank);background-attachment:fixed;}
* html .fixed-top /* IE6 頭部固定 */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop));}
* html .fixed-right /* IE6 右側固定 */ {position:absolute;right:auto;left:expression(eval(document.documentElement.scrollLeft+document.documentElement.clientWidth-this.offsetWidth)-(parseInt(this.currentStyle.marginLeft,10)||0)-(parseInt(this.currentStyle.marginRight,10)||0));}
* html .fixed-bottom /* IE6 底部固定 */{position:absolute;bottom:auto;top:expression(eval(document.documentElement.scrollTop+document.documentElement.clientHeight-this.offsetHeight-(parseInt(this.currentStyle.marginTop,10)||0)-(parseInt(this.currentStyle.marginBottom,10)||0)));}
* html .fixed-left /* IE6 左側固定 */{position:absolute;right:auto;left:expression(eval(document.documentElement.scrollLeft));}


或是簡單的
Fixed Positioning in Internet Explorer 6

1. * {
2. margin: 0;
3. }
4. html, body {
5. height: 100%;
6. overflow: auto;
7. }
8. .wrapper {/*正常的*/
9. position: relative;
10. width: 100%;
11. height: 100%;
12. overflow: auto;
13. }
14. .box {/*固定的*/
15. position: fixed;
16. left: 10px;
17. top: 180px;
18. }
19. * html .box {
20. position: absolute;
21. }

2009年8月14日 星期五

mysql 裡 utf8_general_ci 跟 utf8_unicode_ci 連線校對的差異

mysql 裡 utf8_general_ci 跟 utf8_unicode_ci 連線校對的差異

有用過 mysql 的 UTF-8 編碼的人可能都會對這件事感到疑惑:

連線校對(collation)裡面的

utf8_general_ci
跟
utf8_unicode_ci

到底有什麼差異呢?
在 phpMyAdmin 裡面的說明看起來通通一樣:

utf8_general_ci 統一碼 (Unicode) (多語言), 大小寫不相符
utf8_unicode_ci 統一碼 (Unicode) (多語言), 大小寫不相符

實在是看不出什麼刁來。

所以前一陣子在搞 mysql UTF-8 化的時候,谷歌了一番,
發現這篇文章裡有詳盡的說明:(其實就是把 mysql reference manual 翻譯而已)

utf8_general_ci 在轉換時速度比較快
utf8_unicode_ci 在轉換時比較精準

轉換?怎麼講呢?
簡單說就是當資料要從一個編碼換成另外一個編碼時,
mysql 要在兩個 codepage 裡面找出來相對應的字元位置在哪裡。
對 utf8_general_ci 來說,來源 codepage 裡面的一個字元只能對應到目標 codepage 裡面的一個字元,
而 utf8_unicode_ci 則可以把來源 codepage 裡的一個字元對應到目標 codepage 裡的多個字元(或反過來)。
例如德文裡的 ß 要轉換成英文的時候如果是用 utf8_unicode_ci 轉換會變成正確的 ss ,
但是如果用 utf8_general_ci 的話則會變成單一的 s 而已。

所以如果可以的話請盡量用 utf8_unicode_ci 而不要用 utf8_general_ci ,
雖然對 multibyte 字元來說這兩個都沒差,
但是 utf8 的網頁誰也不知道哪天會不會有這種字元出現在你的網頁上,
所以如果設成 utf8_unicode_ci 你就不需要擔心貼上去之後資料在轉換間遺失了。

2009年8月4日 星期二

在jQuery如何判斷頁面元素存在與否呢?

if ( $("#someID").length > 0 ) {
$("#someID").text("hi");
}

2009年7月29日 星期三

PHP cURL 中 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 的關聯

PHP cURL 中 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 的關聯

PHP cURL 有兩個 option - CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT ,在 PHP: curl_setopt - Manual 的介紹分別是︰

CURLOPT_CONNECTTIMEOUT

The number of seconds to wait whilst trying to connect. Use 0 to wait indefinitely.

CURLOPT_TIMEOUT

The maximum number of seconds to allow cURL functions to execute.

我看完在想的是,那這兩個 option 彼此之間有沒有關係?會不會互相影響?

順手測了一下,答案是會。

CURLOPT_TIMEOUT 要比 CURLOPT_CONNECTTIMEOUT 大,不然設定 CURLOPT_CONNECTTIMEOUT 就沒有意義了。 CURLOPT_TIMEOUT 設定的秒數一到,就算 CURLOPT_CONNECTTIMEOUT 設定的秒數還沒到, cURL 也會被強制中斷。

我測試的方法是設定 CURLOPT_URL 連往不存在的 IP 。設定連往不存在的 Domain 沒法測,因為 cURL 去 DNS 查不到 IP 就不會繼續跑了,還用不到 CURLOPT_CONNECTTIMEOUT 和 CURLOPT_TIMEOUT 。

MS SQL日期處理方法

--檢查是否為SQL SERVER合法日期格式

SELECT ISDATE('2004-03-01')

--1 (int)正確

SELECT ISDATE('2004-02-33')

--0 (int)錯誤

--取得現在時間GETDATE()

select GETDATE()

--2008-04-26 03:25:31.900

--取得現在UTC 時間 (國際標準時間或格林威治標準時間)GETUTCDATE()

select GETUTCDATE()

--2008-04-25 19:30:23.650

--取得年.月.日及其它時間單位值

select year(getdate())

select datepart(yyyy, getdate())

select datepart(yy, getdate())

--2008 yyyy(int)年

select month(getdate())

select datepart(mm, getdate())

select datepart(m, getdate())

--4 mm(int)月

select day(getdate())

select datepart(dd, getdate())

select datepart(d, getdate())

--26 dd(int)日

select datepart(qq, getdate())

--2 qq(int)第幾季

select datepart(dw, getdate())

--7 dw(int)星期幾

其它datepar的參數參考下表:

Datepart

Abbreviations

年 year

yy, yyyy

季 quarter

qq, q

月 month

mm, m

年的第幾天 dayofyear

dy, y

日 day

dd, d

年的第幾週 week

wk, ww

星期的第幾天 weekday

預設1=日 2=一....7=六

dw

時 hour

hh

分 minute

mi, n

秒 second

ss, s

毫秒 millisecond

ms

--取得指定日期部分的字串DATENAME()--使用參數同上表datepar參數

SELECT DATENAME(month, GETDATE())

--四月 今天是四月所以傳回=四月,系統地區若為英語系傳回April

SELECT DATENAME(dw, GETDATE())

--星期六

--取得星期幾的單一中文字(日,一,二,三,四,五,六)

SELECT Right(datename(weekday,getdate()),1)

--六 今天是星期六所以傳回=六,系統地區語言必須為中文地區

SELECT CASE datepart(dw, getdate())

WHEN 1 THEN '日'
WHEN 2 THEN '一'
WHEN 3 THEN '二'
WHEN 4 THEN '三'
WHEN 5 THEN '四'
WHEN 6 THEN '五'
WHEN 7 THEN '六' END

--六 今天是星期六所以傳回=六

--設定一星期的開始日為哪天--影響datepart,datename使用參數weekday,dw的回傳值

SET DATEFIRST 7 --設定星期天為一星期的第1天 (預設為7)

select @@DATEFIRST

--7 (int)

Value

First day of the week is

1

Monday

2

Tuesday

3

Wednesday

4

Thursday

5

Friday

6

Saturday

7 (default, U.S. English)

Sunday

--取得10天前或10天後日期(參數請看上面datepar參數表)

SELECT DATEADD(day, -10, '04/30/2008')

--2008-04-20 00:00:00.000

SELECT DATEADD(day, 10, '04/30/2008')

--2008-05-10 00:00:00.000

--計算兩時間差(參數請看上面datepar參數表)

SELECT DATEDIFF(day,GETDATE(),'04/30/2008')

--4 (int)

--轉換時間格式

不帶世紀數位 (yy)

帶世紀數位 (yyyy)


標準


輸入/輸出**

-

0 或 100 (*)

預設值

mon dd yyyy hh:miAM(或 PM)

1

101

美國

mm/dd/yyyy

2

102

ANSI

yy.mm.dd

3

103

英國/法國

dd/mm/yy

4

104

德國

dd.mm.yy

5

105

義大利

dd-mm-yy

6

106

-

dd mon yy

7

107

-

mon dd, yy

8

108

-

hh:mm:ss

-

9 或 109 (*)

預設值 + 毫秒

mon dd yyyy hh:mi:ss:mmmAM(或 PM)

10

110

美國

mm-dd-yy

11

111

日本

yy/mm/dd

12

112

ISO

yymmdd

-

13 或 113 (*)

歐洲預設值 + 毫秒

dd mon yyyy hh:mm:ss:mmm(24h)

14

114

-

hh:mi:ss:mmm(24h)

-

20 或 120 (*)

ODBC 規範

yyyy-mm-dd hh:mm:ss[.fff]

-

21 或 121 (*)

ODBC 規範(帶毫秒)

yyyy-mm-dd hh:mm:ss[.fff]

-

126(***)

ISO8601

yyyy-mm-dd Thh:mm:ss:mmm(不含空格)

-

130*

科威特

dd mon yyyy hh:mi:ss:mmmAM

-

131*

科威特

dd/mm/yy hh:mi:ss:mmmAM

select convert(char, getdate(), 100)

--04 26 2008 2:04AM mon dd yyyy hh:mmAM(PM)

select convert(char, getdate(), 101)

--04/26/2008 mm/dd/yyyy
select convert(char, getdate(), 102)

--2008.04.26 yyyy.mm.dd

select convert(char, getdate(), 103)

--26/04/2008 dd/mm/yyyy
select convert(char, getdate(), 104)

--26.04.2008 dd.mm.yyyy
select convert(char, getdate(), 105)

--26-04-2008 dd-mm-yyyy
select convert(char, getdate(), 106)

--26 04 2008 dd mon yyyy
select convert(char, getdate(), 107)

--04 26, 2008 mon dd, yyyy
select convert(char, getdate(), 108)

--02:04:53 hh:mm:ss
select convert(char, getdate(), 109)

--04 26 2008 2:04:53:583AM mon dd yyyy hh:mm:ss:mmmAM(PM)
select convert(char, getdate(), 110)

--04-26-2008 mm-dd-yyyy
select convert(char, getdate(), 111)

--2008/04/26 yyyy/mm/dd
select convert(char, getdate(), 112)

--20080426 yyyymmdd

select convert(char(6), getdate(), 112)

--200804 yyyymm

select convert(char, getdate(), 113)

--26 04 2008 02:04:53:583 dd mon yyyy hh:mm:ss:mmm
select convert(char, getdate(), 114)

--02:04:53:583 hh:mm:ss:mmm(24h)
select convert(char, getdate(), 120)

--2008-04-26 02:04:53 yyyy-mm-dd hh:mm:ss(24h)

select convert(char(7), getdate(), 120)

--2008-04 yyyy-mm
select convert(char, getdate(), 121)

--2008-04-26 02:04:53.583 yyyy-mm-dd hh:mm:ss.mmm

資料類型

範圍

精確度

datetime

1753 年 1 月 1 日到 9999 年 12 月 31 日

3.33 毫秒

smalldatetime

1900 年 1 月 1 日到 2079 年 6 月 6 日

1 分鐘

--取得這個小時開始的時間
SELECT DATEADD(hh,DATEDIFF(hh,0,getdate()),0)
--2008-04-26 06:00:00.000 (datetime)

--取得下個小時開始的時間
SELECT DATEADD(hh,1,DATEADD(hh,DATEDIFF(hh,0,getdate()),0))
--2008-04-26 07:00:00.000 (datetime)

--取得今天開始的時間(凌晨12點)
SELECT DATEADD(dd,DATEDIFF(dd,0,getdate()),0)
--2008-04-26 00:00:00.000 (datetime)


--取得本週的星期日,星期一(本週開始日為星期日)
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),-1)
--2008-04-20 00:00:00.000 (datetime)

SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),0)
--2008-04-21 00:00:00.000 (datetime)

--取得上週五,上週六
SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),-3)
--2008-04-18 00:00:00.000 (datetime)

SELECT DATEADD(wk,DATEDIFF(wk,0,getdate()),-2)
--2008-04-19 00:00:00.000 (datetime)

--取得本月的第一天
SELECT DATEADD(mm,DATEDIFF(mm,0,getdate()),0)
--2008-04-01 00:00:00.000 (datetime)

--取得下個月的第一天
SELECT dateadd(mm,1,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))
--2008-05-01 00:00:00.000 (datetime)

--取得本月的最後一天
SELECT dateadd(dd,-1,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))
--2008-04-30 00:00:00.000 (datetime)
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,getdate())+1,0))
--2008-04-30 23:59:59.997 (datetime)

--取得上個月的最後一天
SELECT dateadd(dd,-1,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))
--2008-03-31 00:00:00.000 (datetime)
SELECT dateadd(ms,-3,DATEADD(mm,DATEDIFF(mm,0,getdate()),0))
--2008-03-31 23:59:59.997 (datetime)

--取得本月天數
SELECT Day(dateadd(dd,-1,DATEADD(mm, DATEDIFF(m,0,getdate())+1, 0)))
--30 (int)

--取得本季的第一天
SELECT DATEADD(qq,DATEDIFF(qq,0,getdate()),0)
--2008-04-01 00:00:00.000 (datetime)


--取得下一季的第一天
SELECT DATEADD(qq,DATEDIFF(qq,0,dateadd(mm,3,getdate())),0)
--2008-07-01 00:00:00.000 (datetime)


--取得本季天數
SELECT DATEDIFF(dd,DATEADD(qq,DATEDIFF(qq,0,getdate()),0),DATEADD(qq,DATEDIFF(qq,0,dateadd(mm,3,getdate())),0))
--91 (int)

--取得今年的第一天
SELECT DATEADD(yy,DATEDIFF(yy,0,getdate()),0)
--2008-01-01 00:00:00.000 (datetime)

--取得明年的第一天
SELECT DATEADD(yy,1,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))
--2009-01-01 00:00:00.000 (datetime)

--取得去年的最後一天
SELECT dateadd(dd,-1,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))
--2007-12-31 00:00:00.000 (datetime)
SELECT dateadd(ms,-2,DATEADD(yy,DATEDIFF(yy,0,getdate()),0))
--2007-12-31 23:59:59.997 (datetime)

轉摘至:http://openmyhand.com/cms/index.php?option=com_content&task=view&id=62&Itemid=39