ツイートID→時刻変換

  • /*
     * @title ツイートID→時刻変換
     * @description Twitterの個別ツイート(https://twitter.com/<name>/status/<id>)のURL(<id>)からおおよその投稿時刻を取得(2010年11月4日22時(UTC)以降のもの)
     * @include https://twitter.com/*
     * @license MIT License
     * @javascript_url
     */
    
    (()=>{
    'use strict';
    const
        twitter_epoch_time = 1288834974657n, // https://www.slideshare.net/pfi/id-15755280
        threshold_tweet_id = 300000000000000n;
    
    let tweet_id = (new URL(location.href).pathname.match(/^\/[^/]+\/status\/(\d+)/)||[])[1];
    if (! tweet_id) {
        tweet_id = prompt('Tweet ID');
        if (! tweet_id) {
            return;
        }
    }
    tweet_id = BigInt(tweet_id);
    if (tweet_id < threshold_tweet_id) {
        alert(`Unsupported Tweet ID: ${tweet_id} (< ${threshold_tweet_id}, before 2010/11/04)`);
        return;
    }
    let timestamp_ms = Number(twitter_epoch_time + (tweet_id>>22n)),
        date_obj = new Date(timestamp_ms),
        iso_timestring = date_obj.toISOString().replace(/\.\d+Z$/, 'Z');
    date_obj.setMinutes(date_obj.getMinutes() - date_obj.getTimezoneOffset());
    let timestring = date_obj.toISOString().replace(/T/, ' ').replace(/\.\d+Z$/, ''),
        prompt_text = `
    [Tweet ID] ${tweet_id}
    [ISO 8601] ${iso_timestring}`,
        result = prompt(prompt_text, timestring);
    if (result !== null) {
        navigator.clipboard.writeText(result)
        .catch(error => console.info(`Copy to clipboard failed. (${error})`))
        // TODO: Firefox だとエラーになる (90.0.2)
        //  Uncaught (in promise) DOMException: Clipboard write was blocked due to lack of user activation.
        .then(() => console.debug(`Copy to clipboard succeeded. (${result})`));
    }
    })();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2023/11/11 11:47:49 - 2023-11-11
  2. 2021/08/01 11:34:43 - 2021-08-01
  3. 2021/08/01 11:15:01 - 2021-08-01
  4. 2021/08/01 11:00:49 - 2021-08-01
  5. 2014/04/06 19:32:23 - 2014-04-06
  6. 2014/04/05 12:12:16 - 2014-04-05
  7. 2014/04/05 12:11:14 - 2014-04-05