{"id":28376972,"url":"https://github.com/bellingcat/uniform-timezone","last_synced_at":"2025-06-26T18:32:08.500Z","repository":{"id":180935223,"uuid":"656802882","full_name":"bellingcat/uniform-timezone","owner":"bellingcat","description":"Extension to standardize dates and times to the same timezone across social media websites.","archived":false,"fork":false,"pushed_at":"2025-01-09T15:05:31.000Z","size":779,"stargazers_count":33,"open_issues_count":5,"forks_count":6,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-05-30T00:42:02.559Z","etag":null,"topics":["chrome-extension","converter","javascript","open-source-research","timezone"],"latest_commit_sha":null,"homepage":"https://chrome.google.com/webstore/detail/uniform-timezone-extensio/fhpdgikedeljapdckiegnjiendkhphlg","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bellingcat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"patreon":"https://www.patreon.com/bellingcat"}},"created_at":"2023-06-21T17:09:20.000Z","updated_at":"2025-05-30T00:12:08.000Z","dependencies_parsed_at":"2023-12-05T17:45:41.483Z","dependency_job_id":"77508ee5-24df-4ffe-897c-db8bd1a56741","html_url":"https://github.com/bellingcat/uniform-timezone","commit_stats":null,"previous_names":["bellingcat/uniform-timezone"],"tags_count":1,"template":false,"template_full_name":"fregante/browser-extension-template","purl":"pkg:github/bellingcat/uniform-timezone","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bellingcat%2Funiform-timezone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bellingcat%2Funiform-timezone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bellingcat%2Funiform-timezone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bellingcat%2Funiform-timezone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bellingcat","download_url":"https://codeload.github.com/bellingcat/uniform-timezone/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bellingcat%2Funiform-timezone/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262122793,"owners_count":23262477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chrome-extension","converter","javascript","open-source-research","timezone"],"created_at":"2025-05-30T00:38:49.432Z","updated_at":"2025-06-26T18:32:08.440Z","avatar_url":"https://github.com/bellingcat.png","language":"JavaScript","funding_links":["https://patreon.com/https://www.patreon.com/bellingcat"],"categories":[],"sub_categories":[],"readme":"# Uniform Timezone Extension\n\nTries to bring standardization into social media posts' date-time values.\n\n\u003e Why 1? Working with standard timezones (such as UTC) is useful when cross-referencing dates from distinct online platforms.\n\u003e\n\u003e Why 2? Some platforms actively hide the real date/time of a post (eg: tiktok, youtube, ...).\n\nThis extension converts and decodes, where possible, complete upload/post date-time values into standard timezones (like UTC or your machine's local timezone) and allows the conversion to any other timezone, besides exporting/copying all values.\n\nInstall on [brave/chrome](https://chrome.google.com/webstore/detail/uniform-timezone-extensio/fhpdgikedeljapdckiegnjiendkhphlg).\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"media/screenshot-webstore.png\" alt=\"extension preview\" width=\"400px\"/\u003e\n\u003cimg src=\"media/screenshot-extension.png\" alt=\"extension preview\" width=\"400px\"/\u003e\n\u003c/p\u003e\n\n### Currently supported platforms\n\n| Platform  | Status | inspired by                                                                                                                                      |\n| --------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Twitter/X | ✅      |                                                                                                                                                  |\n| Tiktok    | ✅*     | [tiktok-timestamp](https://bellingcat.github.io/tiktok-timestamp/)                                                                               |\n| Discord   | ✅*     |                                                                                                                                                  |\n| Instagram | ✅      |                                                                                                                                                  |\n| Bluesky   | ✅*     | works only for english translation of the platform, hard to expand                                                                               |\n| Wayback Machine   | ✅     | |\n| Linkedin  | TODO   | come help! [Linkedin-post-timestamp-extractor](https://ollie-boyd.github.io/Linkedin-post-timestamp-extractor/)                                  |\n| Youtube   | TODO   | come help! it requires the official API (see [amnesty youtube dataviewer](https://citizenevidence.amnestyusa.org/)) / and possibly file metadata |\n| Facebook  | TODO   | come help!                                                                                                                                       |\n| GitHub    | TODO   | come help!                                                                                                                                       |\n| Vkontakte | TODO   | is it possible? come help!                                                                                                                       |\n| More      | ...    | please suggest more via [issues](https://github.com/bellingcat/uniform-timezone/issues)                                                          |\n\n- ✅ works on all known cases\n- ✅* works on most cases with exceptions\n- TODO: come help! look at the issues or open a new one. If you want to start working on something use the issues to let the community know.\n\n### Twitter ✅\nHow to use?\n1. Hover over any time element on the page.\n2. Also works on tweets archived on web.archive.org.\n\n### Tiktok ✅*\nHow to use?\n\nTimestamps handled by this script:\n * Individual `/video/` pages -\u003e hover over username\n * User page video thumbnails -\u003e hover over username/date\n * `/explore` feed page -\u003e hover over username/date\n * `/foryou` feed page -\u003e hover over username/date\n *. Also works on tiktoks archived on web.archive.org.\nTimestamps not handled by this script:\n * \"you may like\" thumbnails -\u003e is it possible to do it for the \"you may like\" section on the right side of a video page? there is no id in the html but perhaps the click event listener could somehow be intercepted/mocked.\n\nTimestamps not handled by this script:\n1. video thumbnails on the right pane AKA \"You may like\". (can you find a way to do it?)\n\n### Discord ✅*\nHow to use? Hover over any time element on the page.\n\nTimestamps handled by this script:\n * messages (in all channel types)\nTimestamps not handled by this script:\n * message edits\n * forum thread overview\n * Not enabled on the wayback machine.\n\n\n### Instagram ✅\nHow to use? Hover over any time element on the page.\n\n * All timestamps should be properly parsed.\n * Not all post urls are read (possible improvement).\n * Not enabled on the wayback machine.\n\n\n### Blusky ✅*\nHow to use? Hover over any time element on the page.\n\n * Only works for the english language translation of bsky.app\n * Not enabled on the wayback machine.\n\n---\n\n#### See below if you want to contribute and check the [open issues](https://github.com/bellingcat/uniform-timezone/issues).\n\n\u003cdetails\u003e\u003csummary\u003e\u003ch1\u003eDevelopment \u0026 Contributing\u003c/h1\u003e\u003c/summary\u003e\n\n\n\n### 🛠 Build locally\n\n1. Checkout the copied repository to your local machine eg. with `git clone https://github.com/my-username/my-awesome-extension/`\n1. Run `npm install` to install all required dependencies\n1. Run `npm run build`\n\nThe build step will create the `distribution` folder, this folder will contain the generated extension.\n\n### 🏃 Run the extension\n\n(optional) Using [web-ext](https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/) is recommended for automatic reloading and running in a dedicated browser instance. Alternatively you can load the extension manually (see below).\n\n1. Run `npm run watch` to watch for file changes and build continuously\n2. Then either [load the extension manually in Chrome](https://www.smashingmagazine.com/2017/04/browser-extension-edge-chrome-firefox-opera-brave-vivaldi/#google-chrome-opera-vivaldi) or [Firefox](https://www.smashingmagazine.com/2017/04/browser-extension-edge-chrome-firefox-opera-brave-vivaldi/#mozilla-firefox) by uploading unpacked extension (you need to manuall click the update button when making changes)\n3. OR use [web-ext](https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/) for autoreloading\n   1. run `npm install --global web-ext` (only only for the first time)\n   2. In another terminal, run `web-ext run -t chromium`\n4. Check that the extension is loaded by going to any of the implemented platforms\n\n### Add a new timezone fixer\nTo add a new fixer you need:\n1. edit [manifest.json](source/manifest.json) `content_scripts` and `web_accessible_resources` to include wildcards for the platform and reference a new content-script file\n2. JS logic in the content-script file: see the example for [twitter](source/js/timezone-fixers/twitter.js). Feel free to add additional CSS if needed.\n3. If the platform is archivable on archive.org try to add your fixer there as well (see the example for twitter in manifest.json)\n4. Test and make a PR with screenshots/notes on implementation if needed\n\n### Publishing (WIP)\n\nIt's possible to automatically publish to both the Chrome Web Store and Mozilla Addons at once by adding these secrets on GitHub Actions:\n\n1. `CLIENT_ID`, `CLIENT_SECRET`, and `REFRESH_TOKEN` from [Google APIs][link-cws-keys].\n2. `WEB_EXT_API_KEY`, and `WEB_EXT_API_SECRET` from [AMO][link-amo-keys].\n\nAlso include `EXTENSION_ID` in the secrets ([how to find it](https://stackoverflow.com/a/8946415/288906)) and add Mozilla’s [`gecko.id`](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_specific_settings) to `manifest.json`.\n\nThe GitHub Actions workflow will:\n\n1. Build the extension\n2. Create a version number based on the current UTC date time, like [`19.6.16`](https://github.com/fregante/daily-version-action) and sets it in the manifest.json\n3. Deploy it to both stores\n\n#### Auto-publishing (WIP)\n\nThanks to the included [GitHub Action Workflows](.github/workflows), if you set up those secrets in the repo's Settings, the deployment will automatically happen:\n\n- on a schedule, by default [every week](.github/workflows/release.yml) (but only if there are any new commits in the last tag)\n- manually, by clicking [\"Run workflow\"](https://github.blog/changelog/2020-07-06-github-actions-manual-triggers-with-workflow_dispatch/) in the Actions tab.\n\n\n\u003c/details\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbellingcat%2Funiform-timezone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbellingcat%2Funiform-timezone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbellingcat%2Funiform-timezone/lists"}