Modifiers(修飾子)の指定

広告

ここまでに紹介した日付と時刻に関する関数には引数としてModifiersを指定することができます。

date(timestring, modifier, modifier, ...)
time(timestring, modifier, modifier, ...)
datetime(timestring, modifier, modifier, ...)
julianday(timestring, modifier, modifier, ...)
strftime(format, timestring, modifier, modifier, ...)

Modifiersは1番目または2番目に指定した日付と時刻を表す値を加工するために指定されるもので、必要に応じて複数指定することができます。

指定可能なModifiersは次の通りです。

NNN years
NNN months
NNN days
NNN hours
NNN minutes
NNN.NNNN seconds
start of year
start of month
start of day
weekday N
unixepoch
localtime
utc

では順に確認していきます。

日時または時刻の要素を加算・減算

次のModifiersでは対象の日付と時刻に対して、月や日、また時や分などの値を加算したり減算したりする場合に使います。

NNN years
NNN months
NNN days
NNN hours
NNN minutes
NNN.NNNN seconds

例えば1日追加するには"+1 days"と記述します。また1時間戻すには"-1 hours"と記述します。

select datetime('2009-08-24 23:10:15', '+1 days');   /* 2009-08-25 23:10:15 */
select datetime('2009-08-24 23:10:15', '-1 hours');  /* 2009-08-24 22:10:15 */

Modifiersは複数指定できますので、1日追加して1時間戻すこともできます。

select datetime('2009-08-24 23:10:15', '+1 days', '-1 hours');

では実際に試してみます。

p9-1

p9-2

加算や減算した結果、月などが変わる場合も自動的に計算されます。

p9-3

"2009-01-01 00:00:00"の1秒前は"2008-12-31 23:59:59"と表示されます。

最初の日と最初の時間

次のModifiersでは対象の日付に対してその日付の年の最初の日などを返します。

start of year
start of month
start of day

'start of year'と指定すると、対象の日付の年の最初の日(1月1日の00:00:00)が返されます。'start of month'と指定すると、対象の日付の月の最初の日(1日の00:00:00)が返されます。'start of day'と指定すると、対象の日付の午前0時(00:00:00)が返されます。

select datetime('2009-08-24 23:10:15', 'start of year');   /* 2009-01-01 00:00:00 */
select datetime('2009-08-24 23:10:15', 'start of month');  /* 2009-08-01 00:00:00 */
select datetime('2009-08-24 23:10:15', 'start of day');    /* 2009-08-24 00:00:00 */

では実際に試してみます。

p9-4

p9-5

p9-6

指定した曜日の日

次のModifiersでは対象の日付以降の日付で指定した曜日の最初の日を返します。

weekday N

Nには曜日を表す数値を指定します。0が日曜日で6が土曜日となります。対象となる日付以降で指定した曜日の日付を返します。

select date('2009-08-24', 'weekday 0');   /* 2009-08-30 00:00:00 */
select date('2009-08-24', 'weekday 1');   /* 2009-08-24 00:00:00 */
select date('2009-08-24', 'weekday 2');   /* 2009-08-25 00:00:00 */

対象の日付'2009-08-24'は月曜日なので、'weekday 1'を指定した場合は対象の日付そのものを返します。'weekday 0'を指定した場合は対象の日付以降の次の日曜日なので"2009-08-30"を返します。

では実際に試してみます。

p9-7

UNIXタイムスタンプでの指定

次のModifiersを指定すると、日付の指定を'DDDDDDDDDD'の形式で指定した時に、ユリウス日ではなくUNIXタイムスタンプでの値として処理します。

unixepoch

UNIXタイムスタンプとは1970年1月1日午前0時からの経過秒数です。よって'DDDDDDDDDD'の形式で指定した値の単位は秒数として扱われます。

select datetime('1');                /* -4713-11-25 12:00:00 */
select datetime('1', 'unixepoch');   /* 1970-01-01 00:00:01 */

最初のSELECT文ではユリウス日として扱われますので、基準日である紀元前4713年11月24日12:00:00から1日経過した日付を取得します。2番目のSELECT文ではUNIXタイムスタンプとして扱われますので、基準日である1970年1月1日00:00:00から1秒経過した日付を取得します。

では実際に試してみます。

p9-8

p9-9

ローカルタイムゾーンでの表示

次のModifiersを指定すると、対象の日付をローカルのタイムゾーンに変換します。

localtime

デフォルトでは対象の日付と時刻のタイムゾーンはUTC(協定世界時)として扱われます。localtimeを指定すると、UTCタイムゾーンとして処理された日付と時刻をローカルのタイムゾーンでの日付と時刻に変換して返してくれます。

select datetime('2009-08-25');                /* 2009-08-25 00:00:00 */
select datetime('2009-08-25', 'localtime');   /* 2009-08-25 09:00:00 */

日本の場合はJST(日本標準時)に変換しますが、JSTはUTCに+09:00したものです。

では実際に試してみます。

p9-10

UTCタイムゾーンでの表示

次のModifiersを指定すると、対象の日付をUTCタイムゾーンに変換します。

utc

"utc"を指定した場合だけ、対象の日付のタイムゾーンをローカルタイムゾーンとして扱います。そして対象の日付と時刻をUTCタイムゾーンに変換して返してくれます。

select datetime('2009-08-25');          /* 2009-08-25 00:00:00 */
select datetime('2009-08-25', 'utc');   /* 2009-08-24 15:00:00 */

日本の場合は対象の日付と時刻のタイムゾーンをJST(日本標準時)として扱い、UTCタイムゾーンに変換します。

では実際に試してみます。

p9-11

( Written by Tatsuo Ikura )