chromium/chrome/browser/resources/settings/time.ts

// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

const WINDOWS_EPOCH = Date.UTC(1601, 0, 1, 0, 0, 0, 0);
const UNIX_EPOCH = Date.UTC(1970, 0, 1, 0, 0, 0, 0);


/**
 * Converts a JavaScript Date() object to a string that represents microseconds
 * since the Windows FILETIME epoch.
 *
 * The JS Date() is based off of the number of milliseconds since the UNIX epoch
 * (1970-01-01 00::00:00 UTC), while times stored within prefs are represented
 * as the number of microseconds since the Windows FILETIME epoch
 * (1601-01-01 00:00:00 UTC).
 */
export function convertDateToWindowsEpoch(date = Date.now()) {
  const epochDeltaMs = UNIX_EPOCH - WINDOWS_EPOCH;
  return `${(date + epochDeltaMs) * 1000}`;
}