如何将日期和时间解析为通用时间戳?
How to parse date and time into a universal timestamp?
背景:
我正在开发一个 fit-bit 健身应用程序。
因此,我从 fit-bit API 获得更新,其中包含日期、时间和当时的心率,格式如下:
date = "2021-02-01"
time = "14:15:00"
bpm: 78
现在,我需要将其转换为时间戳并以 =>(timestamp: heart-rate) 格式保存心率
我根据 timetsamp 从应用程序查询心率数据 - 所以它们必须匹配。
问题:
我正在使用 moment.js 解析给定数据以获取时间戳,
let date = "2021-02-01"
let time = "14:15:00"
let t = moment(`${date} ${time}`, 'yyyy-mm-dd hh:mm:ss').valueOf();
console.log("Timestamp", t, new Date(t).toUTCString())
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous"></script>
对于上面的代码,我得到了不同的值:
在我更新数据库的后端服务器上:
"Timestamp", 1609510500000 Fri, 01 Jan 2021 14:15:00 GMT Fri,
如您所见,它映射到 1 月 1 日,请帮忙
您在不同系统上得到不同结果的原因是 YYYY-MM-DD hh:mm 格式的时间戳(即没有时区偏移)将被视为本地时间,因此主机系统的偏移将在解析它并因此从中生成 UTC 时间值时使用。这意味着它代表时区偏移不同的系统中的不同时刻。
如果要向服务器发送 UTC 时间值,请创建一个有效的 ECMAScript timestamp(ISO 8601 的一个版本),将其解析为日期,然后获取其时间值,例如
let date = "2021-02-01";
let time = "14:15:00";
let d = new Date(`${date}T${time}`); // Parse as local
let timeValue = d.getTime();
console.log(
'Local: ' + d.toString() +
'\nUTC : ' + d.toISOString() +
'\nTime value: ' + timeValue
);
看看Why does Date.parse give incorrect results?
也很有用
如果您有 UTC 值作为开头,您只需使用适当的年、月、日等值调用 Date.UTC 即可获取时间值以直接用作时间戳(记住月份是零索引,因此从日历月份数字中减去 1,例如 Jan = 0,Feb = 1,等等)。
背景:
我正在开发一个 fit-bit 健身应用程序。 因此,我从 fit-bit API 获得更新,其中包含日期、时间和当时的心率,格式如下:
date = "2021-02-01"
time = "14:15:00"
bpm: 78
现在,我需要将其转换为时间戳并以 =>(timestamp: heart-rate) 格式保存心率 我根据 timetsamp 从应用程序查询心率数据 - 所以它们必须匹配。
问题: 我正在使用 moment.js 解析给定数据以获取时间戳,
let date = "2021-02-01"
let time = "14:15:00"
let t = moment(`${date} ${time}`, 'yyyy-mm-dd hh:mm:ss').valueOf();
console.log("Timestamp", t, new Date(t).toUTCString())
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous"></script>
对于上面的代码,我得到了不同的值:
在我更新数据库的后端服务器上:
"Timestamp", 1609510500000 Fri, 01 Jan 2021 14:15:00 GMT Fri,
如您所见,它映射到 1 月 1 日,请帮忙
您在不同系统上得到不同结果的原因是 YYYY-MM-DD hh:mm 格式的时间戳(即没有时区偏移)将被视为本地时间,因此主机系统的偏移将在解析它并因此从中生成 UTC 时间值时使用。这意味着它代表时区偏移不同的系统中的不同时刻。
如果要向服务器发送 UTC 时间值,请创建一个有效的 ECMAScript timestamp(ISO 8601 的一个版本),将其解析为日期,然后获取其时间值,例如
let date = "2021-02-01";
let time = "14:15:00";
let d = new Date(`${date}T${time}`); // Parse as local
let timeValue = d.getTime();
console.log(
'Local: ' + d.toString() +
'\nUTC : ' + d.toISOString() +
'\nTime value: ' + timeValue
);
看看Why does Date.parse give incorrect results?
也很有用如果您有 UTC 值作为开头,您只需使用适当的年、月、日等值调用 Date.UTC 即可获取时间值以直接用作时间戳(记住月份是零索引,因此从日历月份数字中减去 1,例如 Jan = 0,Feb = 1,等等)。