#chiroruLab

趣味と日々の雑記録

【検証追加】iOS7のcalshow:の引数を計算するjavascript

// リストを作成
DATE = [
{
year : 2001,
month : 1,
day : 1,
hour : 0,
minute : 0,
second : 0,
},
{
year : 2002,
month : 1,
day : 1,
hour : 0,
minute : 0,
second : 0,
}
];

// 時差の設定
var timeZone = 9;

// カレンダーのデフォルトを設定
var date_obj = new Date(DATE[0].year, DATE[0].month-1, DATE[0].day, DATE[0].hour, DATE[0].minute, DATE[0].second, 000);
var apple = (date_obj / 1000);

// ユーザの日時指定
var date2_obj = new Date(DATE[1].year, DATE[1].month-1, DATE[1].day, DATE[1].hour-timeZone, DATE[1].minute, DATE[1].second, 000);
var user = (date2_obj / 1000)

// calshow:用に桁数を調整
var argumentTime = ((user - apple) < 1000000000) ? ("00000000"+(user - apple)).slice(-9) : (user - apple);
if((user - apple) < 0) argumentTime = argumentTime.replace(/(0*?)\-/ , "-$1");

// 引数の値
alert(argumentTime);

// var urlscheme = "calshow:";
// location.href=urlscheme + argumentTime;

検証結果

  • 2000年1月1日0時0分0秒
    • calshow:-31654800
  • 2001年1月1日0時0分0秒
    • calshow:-00032400
  • 2001年1月1日9時0分0秒
    • calshow:000000000
  • 2002年1月1日0時0分0秒
    • calshow:031503600
  • 2013年9月5日0時0分0秒
    • calshow:399999600
  • 2013年9月6日0時0分0秒
    • calshow:400086000
  • 2013年9月12日0時0分0秒
    • calshow:400604400
  • 2013年9月16日0時0分0秒
    • calshow:400950000
  • 2032年9月9日10時46分39秒
    • calshow:999999999

問題点 解決済み


9桁に限定しているので
2032年9月9日10時46分39秒を超えると
9桁から外れてしまい正しい日付を取得できません
if文でも使えば解決できそう。

追記・修正点

17時11分


早速コードを直しました。

  • 2069年1月1日0時0分0秒
    • calshow:2145884400

19時00分


時差の範囲内で値が不正になる問題を修正しました。

if((user - apple) < 0) argumentTime = argumentTime.replace(/(0*?)\-/ , "-$1");

// 修正前

  • 2001年1月1日0時0分0秒
    • calshow:000-32400

// 修正後

  • 2001年1月1日0時0分0秒
    • calshow:-00032400