Submit Search
Upload
時を超えた JavaScript の道
•
8 likes
•
12,706 views
Teppei Sato
Follow
at Shibuya.js beyond HTML5 (2010/07/30) http://atnd.org/events/6730
Read less
Read more
Technology
Report
Share
Report
Share
1 of 28
Download now
Download to read offline
Recommended
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
MagicOnion入門
MagicOnion入門
torisoup
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
例外設計における大罪
例外設計における大罪
Takuto Wada
Spring tools4
Spring tools4
Takuya Iwatsuka
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
Recommended
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実⾏される秘密 - JITコンパイラ⼊⾨(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
MagicOnion入門
MagicOnion入門
torisoup
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
【Unite Tokyo 2018】さては非同期だなオメー!async/await完全に理解しよう
Unity Technologies Japan K.K.
例外設計における大罪
例外設計における大罪
Takuto Wada
Spring tools4
Spring tools4
Takuya Iwatsuka
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
スクラムパタン入門
スクラムパタン入門
Kiro Harada
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
ゲーム開発を乗りこなせ! ヒストリア流ゲーム開発マネジメント手法
ゲーム開発を乗りこなせ! ヒストリア流ゲーム開発マネジメント手法
historia_Inc
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
Effective JavaScript Ch.1
Effective JavaScript Ch.1
Teppei Sato
初学者にJavaScriptを教えてみた
初学者にJavaScriptを教えてみた
彰 村地
More Related Content
What's hot
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
IgaHironobu
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
torisoup
スクラムパタン入門
スクラムパタン入門
Kiro Harada
Pythonによる黒魔術入門
Pythonによる黒魔術入門
大樹 小倉
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Genya Murakami
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
Yoshiki Hayama
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
torisoup
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
ゲーム開発を乗りこなせ! ヒストリア流ゲーム開発マネジメント手法
ゲーム開発を乗りこなせ! ヒストリア流ゲーム開発マネジメント手法
historia_Inc
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
Koji Morikawa
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki
What's hot
(20)
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
FlutterでGraphQLを扱う
FlutterでGraphQLを扱う
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Unityでオンラインゲーム作った話
Unityでオンラインゲーム作った話
スクラムパタン入門
スクラムパタン入門
Pythonによる黒魔術入門
Pythonによる黒魔術入門
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
Mavenの真実とウソ
Mavenの真実とウソ
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
45分間で「ユーザー中心のものづくり」ができるまで詰め込む
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
Unity開発で使える設計の話+Zenjectの紹介
Unity開発で使える設計の話+Zenjectの紹介
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
ゲーム開発を乗りこなせ! ヒストリア流ゲーム開発マネジメント手法
ゲーム開発を乗りこなせ! ヒストリア流ゲーム開発マネジメント手法
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
分散システムについて語らせてくれ
分散システムについて語らせてくれ
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
RPGにおけるイベント駆動型の設計と実装
RPGにおけるイベント駆動型の設計と実装
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Viewers also liked
Effective JavaScript Ch.1
Effective JavaScript Ch.1
Teppei Sato
初学者にJavaScriptを教えてみた
初学者にJavaScriptを教えてみた
彰 村地
サイボウズのフロントエンド開発 現在とこれからの挑戦
サイボウズのフロントエンド開発 現在とこれからの挑戦
Teppei Sato
Swiftビギナーズ 2016/01/09
Swiftビギナーズ 2016/01/09
Yutaka Tajika
関数型プログラミング in javascript
関数型プログラミング in javascript
Ryuma Tsukano
goog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生まで
Teppei Sato
OnsenUI + AngularJS + CloudEndpointsで作るSPA 地雷処理の巻
OnsenUI + AngularJS + CloudEndpointsで作るSPA 地雷処理の巻
Hiroshi Furuyama
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Koji Hasegawa
Browser oh browser browser
Browser oh browser browser
Teppei Sato
templateとautoの型推論
templateとautoの型推論
MITSUNARI Shigeo
Emcpp item31
Emcpp item31
mitsutaka_takeda
Emcpp item41
Emcpp item41
mitsutaka_takeda
Emcpp0506
Emcpp0506
Takatoshi Kondo
Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料
Ryo Igarashi
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Effective modern c++ 5
Effective modern c++ 5
uchan_nos
JavaScript Language Update 2016 (LLoT)
JavaScript Language Update 2016 (LLoT)
Teppei Sato
サイボウズの現在と未来
サイボウズの現在と未来
Teppei Sato
離れた場所でも最高のチームワークを実現する方法 ーサイボウズ開発チームのリモートワーク事例ー
離れた場所でも最高のチームワークを実現する方法 ーサイボウズ開発チームのリモートワーク事例ー
Teppei Sato
Viewers also liked
(20)
Effective JavaScript Ch.1
Effective JavaScript Ch.1
初学者にJavaScriptを教えてみた
初学者にJavaScriptを教えてみた
サイボウズのフロントエンド開発 現在とこれからの挑戦
サイボウズのフロントエンド開発 現在とこれからの挑戦
Swiftビギナーズ 2016/01/09
Swiftビギナーズ 2016/01/09
関数型プログラミング in javascript
関数型プログラミング in javascript
goog.require()を手書きしていいのは小学生まで
goog.require()を手書きしていいのは小学生まで
OnsenUI + AngularJS + CloudEndpointsで作るSPA 地雷処理の巻
OnsenUI + AngularJS + CloudEndpointsで作るSPA 地雷処理の巻
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Xcode 7におけるUIテストとカバレジ計測 #yidev 第20回勉強会
Browser oh browser browser
Browser oh browser browser
templateとautoの型推論
templateとautoの型推論
Emcpp item31
Emcpp item31
Emcpp item41
Emcpp item41
Emcpp0506
Emcpp0506
Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++勉強会#4 Item 17, 18資料
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Effective modern c++ 5
Effective modern c++ 5
JavaScript Language Update 2016 (LLoT)
JavaScript Language Update 2016 (LLoT)
サイボウズの現在と未来
サイボウズの現在と未来
離れた場所でも最高のチームワークを実現する方法 ーサイボウズ開発チームのリモートワーク事例ー
離れた場所でも最高のチームワークを実現する方法 ーサイボウズ開発チームのリモートワーク事例ー
Similar to 時を超えた JavaScript の道
グローバル化はなぜ日時処理問題を引き起こすのか
グローバル化はなぜ日時処理問題を引き起こすのか
Atsushi Kambara
サマータイム導入?【管理者編】 - その時 Notes/Domino は正確な時を刻むのか
サマータイム導入?【管理者編】 - その時 Notes/Domino は正確な時を刻むのか
Haruyuki Nakano
サマータイム導入?【開発者編】 - その時 Notes/Domino は正確な時を刻むのか
サマータイム導入?【開発者編】 - その時 Notes/Domino は正確な時を刻むのか
Haruyuki Nakano
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
20181030 DBSCシンポジウム 情報システムと時間の表現
20181030 DBSCシンポジウム 情報システムと時間の表現
UEHARA, Tetsutaro
サマータイムとうるう秒と2038年問題
サマータイムとうるう秒と2038年問題
UEHARA, Tetsutaro
Similar to 時を超えた JavaScript の道
(6)
グローバル化はなぜ日時処理問題を引き起こすのか
グローバル化はなぜ日時処理問題を引き起こすのか
サマータイム導入?【管理者編】 - その時 Notes/Domino は正確な時を刻むのか
サマータイム導入?【管理者編】 - その時 Notes/Domino は正確な時を刻むのか
サマータイム導入?【開発者編】 - その時 Notes/Domino は正確な時を刻むのか
サマータイム導入?【開発者編】 - その時 Notes/Domino は正確な時を刻むのか
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
20181030 DBSCシンポジウム 情報システムと時間の表現
20181030 DBSCシンポジウム 情報システムと時間の表現
サマータイムとうるう秒と2038年問題
サマータイムとうるう秒と2038年問題
More from Teppei Sato
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Teppei Sato
サイボウズの給与交渉戦 - Boss Side -
サイボウズの給与交渉戦 - Boss Side -
Teppei Sato
Recent compat-table issues
Recent compat-table issues
Teppei Sato
kintoneがAWSで目指すDevOpsQAな開発
kintoneがAWSで目指すDevOpsQAな開発
Teppei Sato
Automated Dependency Updates with Renovate
Automated Dependency Updates with Renovate
Teppei Sato
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
サイボウズの開発を支えるKAIZEN文化
サイボウズの開発を支えるKAIZEN文化
Teppei Sato
SPAと覚悟
SPAと覚悟
Teppei Sato
You Don't Know ES Modules
You Don't Know ES Modules
Teppei Sato
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
Teppei Sato
ES6 in Practice
ES6 in Practice
Teppei Sato
Our wish to Flowtype
Our wish to Flowtype
Teppei Sato
Effective ES6
Effective ES6
Teppei Sato
Flowtype Introduction
Flowtype Introduction
Teppei Sato
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Teppei Sato
本当のClosure Compilerをお見せしますよ。
本当のClosure Compilerをお見せしますよ。
Teppei Sato
DockerがYAVAY!
DockerがYAVAY!
Teppei Sato
JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?
Teppei Sato
More from Teppei Sato
(18)
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
サイボウズの給与交渉戦 - Boss Side -
サイボウズの給与交渉戦 - Boss Side -
Recent compat-table issues
Recent compat-table issues
kintoneがAWSで目指すDevOpsQAな開発
kintoneがAWSで目指すDevOpsQAな開発
Automated Dependency Updates with Renovate
Automated Dependency Updates with Renovate
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
サイボウズの開発を支えるKAIZEN文化
サイボウズの開発を支えるKAIZEN文化
SPAと覚悟
SPAと覚悟
You Don't Know ES Modules
You Don't Know ES Modules
Closure Compiler Updates for ES6
Closure Compiler Updates for ES6
ES6 in Practice
ES6 in Practice
Our wish to Flowtype
Our wish to Flowtype
Effective ES6
Effective ES6
Flowtype Introduction
Flowtype Introduction
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
Closure CompilerのES6対応 あるいはES6時代のAltJS生存戦略
本当のClosure Compilerをお見せしますよ。
本当のClosure Compilerをお見せしますよ。
DockerがYAVAY!
DockerがYAVAY!
JavaScript Unit Test Why? What? How?
JavaScript Unit Test Why? What? How?
Recently uploaded
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Shota Ito
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
iPride Co., Ltd.
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
furutsuka
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
osamut
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
Atomu Hidaka
Recently uploaded
(9)
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
時を超えた JavaScript の道
1.
時を超えた JavaScript の道
@teppeis Shibuya.js beyond HTML5 2010/07/30
2.
自己紹介
3.
経緯 席が向かえの amachang と机の下で足があたっ たりして
キャッキャウフフ ヾ(*´∀`*)ノ するリア充生活 を送っていたら、いつのまにか LT することになっ ていました。 お手柔らかにおねがいします!
4.
さて、国際化が叫ばれる昨今 社内公用語の英語化が話題です。
5.
ちょっと待って! 国際化といえば、 タイムゾーンを忘れてませんか? ということで、 JavaScript のタイムゾーンの話をします。
6.
とりあえずデモ 画面上の時刻表示を変換する
Chrome 拡張 ATND の microformats を読み取って、 PST(太平洋標準時)に変換します。
7.
音響カプラと
3Dと 顔文字アセンブラ のあとに この地味なデモ。
8.
Warning
こっから 地味な話が続きます。 眠たい人は 今がチャンスです。
9.
Date Object in
JavaScript new Date() はローカルタイムを生成 ローカルタイムとUTCのみを扱える ローカルタイムのタイムゾーンはOS設定 夏時間の計算方法は環境依存
10.
え。ということは? UTCやOS設定以外のタイムゾーンを扱うことが できない
環境によって日時表示や日時計算がずれる場合 がある
11.
いろんなTZを扱いたいケース 例)JST を
PST に変換したい 例)カレンダーに旅行の予定を登録するUI 帰りの飛行機は現地時刻(PST)で14:00 「時差何時間だっけ。。」 「この時期ってサマータイム?」 「OSの設定変えたくないよ><」 JavaScript Date では解決できない!
12.
環境によって日時がずれるケース // OSのタイムゾーンをPST(太平洋標準時)に設定して // 2006年4月2日
午前1時 (PST) のタイムスタンプをチェック var dt = new Date(2006,3,2,1,0,0,0); if (1143968400000 === dt.getTime()) { alert( "OK" ); } else { alert( "NG" ); }
13.
結果
Firefox Chrome Safari Opera IE Windows NG NG NG NG NG Mac OK OK NG NG - Linux OK OK - NG - iPhone - - NG NG - Android - OK - - -
14.
なんでズレたの? PDT(太平洋夏時間)の期間が 2006年から2007年にかけて変更されたから 夏時間の期間が約1ヶ月後ろにずれた 2006-04-02
01:00:00 は歴史的には夏時間 ただし、新ルールで計算し直すと標準時
15.
夏時間の対応レベル Lv.1 ルールベース
毎年同じ夏時間ルールを適用 例)毎年3月第2日曜午前2時から夏時間 Windows Lv.2 ヒストリカルデータ 過去の時差情報を利用して時差計算 いわゆる zoneinfo, tz database. 世界の秩序は Olson さんがローカルで管理してる! Linux, Java, Python, Ruby...
16.
ブラジルにルールなんてない! ブラジルは夏時間期間を毎年都度発表 ネパールは +5:45(1986年までは +5:40)
17.
ECMAScript ではどうなってるの? 15.9.1.8
Daylight Saving Time Adjustment ECMAScriptの実装としては、同じルールを毎 年適用する。 でもホスト環境が年ごとの夏時間情報を提供 する場合は、それを利用してもいいよ。 つまり、環境と実装に依存
18.
ということで、 OSに依存せずタイムゾーンを選択 OSに依存せず時差計算
ヒストリカルデータ対応 こんなことをやりたいな。
19.
アプリ開発言語としての JS Webサイトのクライアント側、じゃなくて
HTML5 = オフラインアプリケーション サーバーアクセス無しで動きたい ECMAScript の Date では不十分 ActionScript はどうしてるんだろう
20.
あった。 Google Closure
Library
21.
あれ?肝心のデータが。 URLが。。
22.
データ生成する
せっかくなので Rhino 使ってみた タイムゾーンデータは Joda Time(手抜き) JSONフォーマットに変換 tzdata['America/LosAngeles'] = { 'transitions': [ // 遷移時刻タイムスタンプ(時間)と標準からの時差(分)の配列 2770, 60, 7137, 0, 11506, 60, 16041, 0, ... 580186, 60, 585897, 0, 588922, 60, 594633, 0 ], // 標準時の短縮名、正式名、夏時間の短縮名、正式名 'names': ['PST', 'Pacific Standard Time', 'PDT', 'Pacific Daylight Time'], 'id': 'America/Los_Angeles', // ID 'std_offset': -480 // 標準時差 };
23.
生成したタイムゾーンデータ 1970年 - 2038年 全558地域 358
KB Webアプリならアプリケーションキャッシュを使う か、ファイルを分割して遅延ローディングが良さそ う。
24.
あれ? goog.i18n.TimeZone には localToUTC
なメソッ ドがない goog.date.DateTime にもない。 タイムゾーンの変換ができない。片手落ち。 ので、いくつかの API 追加実装。
25.
goog.i18n.TimeZone.prototype.getUTCMillisFromLocal = function(
opt_year, opt_month, opt_date, opt_hours, opt_minutes, opt_seconds, opt_milliseconds) { ... var localMillis = Date.UTC( opt_year, opt_month, opt_date, opt_hours, opt_minutes, opt_seconds, opt_milliseconds); var localDate = new Date(localMillis); var localOffset = this.getOffset(localDate) * 60 * 1000; var adjustedDate = new Date(localMillis + localOffset); var adjustedOffset = this.getOffset(adjustedDate) * 60 * 1000; if ( localOffset > adjustedOffset ) { var localNext = this.nextTransitions(localMillis + localOffset); var adjustedNext = this.nextTransitions(localMillis + adjustedOffset); if ( localNext !== adjustedNext ) { return localMillis + localOffset; } } return localMillis + adjustedOffset; };
26.
ようやくデモ デモ
画面上の時刻表示を変換する Chrome 拡張 ATND の microformats を読み取って、 PST(太平洋標準時)に変換します。
27.
まとめ JS でマルチタイムゾーンを扱うには自前で実装する必要 があるよ。 標準でなんとかならないかなぁ。 Google Closure
使うんじゃなかった。。 HTML5 ってなんだっけ。
28.
以上です。 ありがとうございました!
Download now