将刻度转换为unix时间戳

问题描述 投票:0回答:4

我正在获取开始时间

634942626000000000
和结束时间
634942638000000000
。如何将其转换为 Unix 时间戳?我想在 PHP 中显示格式化的日期/时间?

php mysql datetime
4个回答
10
投票

C# 刻度是自午夜以来的刻度数

0001-01-01 00:00:00
(每个刻度是秒的 1/10000000),UNIX 时间戳是自 UNIX 纪元开始以来的秒数 (
1970-01-01 01:00:00
),因此所需的结果是
$seconds = 634942626000000000/10000000 - $number_of_seconds
,其中
$number_of_seconds
0001-00-01 00:00:00
1970-01-01 01:00:00
之间的秒数。因此,您现在所需要做的就是确定
$number_of_seconds
等于什么。

更新:这是在 C# 中执行此操作的方法:如何将 Unix 时间戳转换为 DateTime,反之亦然?

更新2使用这个简单的脚本http://hastebin.com/lefiyiheju.mel确定

$number_of_seconds
是62136892800,但我不知道它是否准确


1
投票

这应该可以做到:

$seconds = 634942626000000000 / 1000000000;
echo date("Y-m-d H:i:s", $seconds);

0
投票

@Sinkeat 在 https://stackoverflow.com/a/14427911/1399272 的评论中有正确答案。

Console.WriteLine($"{DateTime.UnixEpoch}: {DateTime.UnixEpoch.Ticks}");

打印

1/1/1970 12:00:00 AM: 621355968000000000
。 所以

$number_of_seconds = 62135596800
$seconds = $ticks/10000000 - $number_of_seconds

应该这样做。 我没有 PHP 解释器来测试这个,但 Google Sheets 中的类似公式确实适用于上述数字,例如

=EPOCHTODATE(C2/10000000-62135596800)

-1
投票

在Python中,你会做的

In [53]: import datetime

In [54]: ticks = 634942626000000000

In [55]: start = datetime.datetime(1, 1, 1)

In [56]: delta = datetime.timedelta(seconds=ticks/10000000)

In [57]: the_actual_date = start + delta

In [58]: the_actual_date.timestamp()
Out[58]: 1358665800.0

In [59]: the_actual_date
Out[59]: datetime.datetime(2013, 1, 20, 7, 10)
© www.soinside.com 2019 - 2024. All rights reserved.