// UnixTime.cms 2010.12.26 by あすかぜ // 1970/01/01 00:00:00 からの経過秒数と // yyyy/MM/dd HH:mm:ss 形式の文字列の相互変換を行います。 // 1970年〜2037年の範囲外の日時は正しく扱えません。 // 編集・再配布は自由です。 // // * parse(str) 日時文字列をパースして Unix Time を返す // * toString(time) Unix Time を日付文字列に変換 // うるう年の判定 function isLeapYear(y){ if(y % 4){ return false; }else if(y % 100){ return true; }else if(y % 400){ return false; }else{ return true; } } // 日付を Unix Time に変換 function toUnixTime(year, month, day, hour, min, sec){ time = int(sec) + (60 * min) + (3600 * hour) + (86400 * (day - 1)); month = int(month); year = int(year); if(month == 2){ time = time + 2678400; } else if(month == 3){ time = time + 5097600; } else if(month == 4){ time = time + 7776000; } else if(month == 5){ time = time + 10368000; } else if(month == 6){ time = time + 13046400; } else if(month == 7){ time = time + 15638400; } else if(month == 8){ time = time + 18316800; } else if(month == 9){ time = time + 20995200; } else if(month == 10){ time = time + 23587200; } else if(month == 11){ time = time + 26265600; } else if(month == 12){ time = time + 28857600; } if(month > 2 && isLeapYear(year)){ time = time + 86400; } while(year > 1970){ year--; if(isLeapYear(year)){ time = time + 31622400; }else{ time = time + 31536000; } } return time - 32400; // JST+0900 } // 日付文字列をパースして、00:00:00 における Unix Time を返す function parseDate(str){ p = pos(str, "/"); if(p > 0){ year = left(str, p - 1); str = mid(str, p + 1); p = pos(str, "/"); if(p > 0){ month = left(str, p - 1); day = mid(str, p + 1); }else{ day = str; month = year; year = GetYear(); } if(year < 100){ year = int(year) + 2000; } return toUnixTime(year, month, day, 0, 0, 0); }else{ return 0; } } // 時間文字列をパースして、00:00:00 からの経過時間を返す function parseTime(str){ p = pos(str, ":"); if(p > 0){ hour = left(str, p - 1); str = mid(str, p + 1); p = pos(str, ":"); if(p > 0){ min = left(str, p - 1); sec = mid(str, p + 1); }else{ min = str; sec = 0; } return int(sec) + (60 * min) + (3600 * hour); }else{ return 0; } } // 日時文字列をパースして Unix Time を返す function parse(str){ p = pos(str, " "); if(p > 0){ return parseDate(left(str, p - 1)) + parseTime(mid(str, p + 1)); }else if(pos(str, ":") > 0){ return parseTime(str); }else{ return parseDate(str); } } // yyyy/MM/dd 形式にフォーマット function format(y, m, d){ if(m < 10){ m = "0" + m; } if(d < 10){ d = "0" + d; } return y + "/" + m + "/" + d; } // yyyy/MM/dd HH:mm:ss 形式にフォーマット function format(year, month, day, hour, min, sec){ if(month < 10){ month = "0" + month; } if(day < 10){ day = "0" + day; } if(hour < 10){ hour = "0" + hour; } if(min < 10){ min = "0" + min; } if(sec < 10){ sec = "0" + sec; } return year + "/" + month + "/" + day + " " + hour + ":" + min + ":" + sec; } // Unix Time を日付文字列に変換 function toString(time){ time = time + 32400; // JST+0900 sec = time % 60; time = (time - sec) / 60; min = time % 60; time = (time - min) / 60; hour = time % 24; d = (time - hour) / 24; year = 1970; days = 365; while(d >= days){ year++; d = d - days; if(isLeapYear(year)){ days = 366; }else{ days = 365; } } if(d >= 59 && days == 365){ d = d + 2; }else{ d++; } if(d > 335){ month = 12; d = d - 335; } else if(d > 305){ month = 11; d = d - 305; } else if(d > 274){ month = 10; d = d - 274; } else if(d > 244){ month = 9; d = d - 244; } else if(d > 213){ month = 8; d = d - 213; } else if(d > 182){ month = 7; d = d - 182; } else if(d > 152){ month = 6; d = d - 152; } else if(d > 121){ month = 5; d = d - 121; } else if(d > 91){ month = 4; d = d - 91; } else if(d > 60){ month = 3; d = d - 60; } else if(d > 31){ month = 2; d = d - 31; } else{ month = 1; } return format(year, month, d, hour, min, sec); } // マクロとして実行した場合、現在時刻の Unix Time を表示する。 time = toUnixTime(GetYear(), GetMonth(), GetDate(), GetHours(), GetMinutes(), GetSeconds()); MessageBox(toString(time) + "\nUnixTime = " + time);