使用PHP/mySQL,用户每天被授予其成员帐户的单个整数点.我将用于确定是否应该授予一个点的数据是这些mysql字段:创建日期(时间戳)和上次登录(UNIX时间).
授予这些积分的程序在用户登录时确定.我的问题是,确定自上次登录以来已经过了多少天的最有效方法是什么?其次,如果用户每天登录,我如何确定是否已经过了24小时并且要授予一个点?过去的天数相当于给定的分数(每天1个).
目前我正在使用此代码:
/*
** Updates Points based on days since last visit
*/
static function UpdatePoints($username)
{
$getlog = System::$mySQL->Select("lastLog, creation FROM users WHERE username='$username'");
$log = System::$mySQL->Fetch($getlog);
$offset = (TIME() - $log['lastLog']) / 86400; // 24hrs
$lastlog = round($offset); // in days
if($lastlog > 0)
{
System::$mySQL->Update("users SET points=points+".$lastlog." WHERE username='$username'");
}
}
Run Code Online (Sandbox Code Playgroud)
除了标记,很明显我的代码是短视的.如果用户每天登录一次,他们就无法获得积分.因此,我必须使用" 创建日期"字段确定正确的方法.我今天无法绕过它,有什么建议吗?谢谢.
假设我有两个日志文件(input.log和output.log),格式如下:
2012-01-16T12:00:00 12345678
Run Code Online (Sandbox Code Playgroud)
第一个字段是处理时间戳,第二个字段是唯一 ID。我试图找到:
input.log没有该 ID 对应记录的记录output.loginput.log具有该ID的记录,但在时间戳的差超过5秒我有一个MySQL的变通解决方案,但我希望删除数据库组件并使用 shell 脚本处理它。
我有以下内容,input.log如果output.log包含 ID ,则返回带有添加列的行:
join -a1 -j2 -o 0 1.1 2.1 <(sort -k2,2 input.log) <(sort -k2,2 output.log)
Run Code Online (Sandbox Code Playgroud)
示例输出:
10111 2012-01-16T10:00:00 2012-01-16T10:00:04
11562 2012-01-16T11:00:00 2012-01-16T11:00:10
97554 2012-01-16T09:00:00
Run Code Online (Sandbox Code Playgroud)
主要问题:
既然我有了这些信息,我该如何计算两个时间戳之间的差异并丢弃相隔超过 5 秒的时间戳?我在处理 ISO 8601 时间戳时遇到了一些问题date(特别是T),并假设必须有更好的方法。
次要问题:
有没有办法重新设计整个方法,例如变成单个awk脚本?我处理多个文件和为输出条件设置正确不等式的知识是这里的限制因素,因此是上述方法。
学习日期,他们现在给我很多困难.
$london = new DateTime();
$london->setTimestamp(0);
$london->setTimeZone(new DateTimeZone('Europe/London'));
echo $london ->format('d-m-Y H-i-s');
Run Code Online (Sandbox Code Playgroud)
结果:
01-01-1970 01-00-00
Run Code Online (Sandbox Code Playgroud)
UTC +0:00午夜不应该是伦敦吗?例如,纽约正确地返回上一个日期的19:00 UTC -5:00.莫斯科回归01-01-1970 03-00-00再次不正确(UTC +3:00相对于UTC +4:00)
不使用时->setTimestamp,伦敦当前时间渲染正确.
动态代码:http://sandbox.onlinephpfunctions.com/
另外,我当地的时区是Europe/Prague(UTC +1:00).同样经过测试date_default_timezone_set('Europe/London').
我认为我的逻辑有一些错误?
我正在寻找在任何浏览器中使用相同时间在国际上预订服务的最佳实践/解决方案。我不太明白逻辑(也在这里挖掘)。
用例
基本上,所有角色都必须在本地时间看到“理发店”,无论他们在哪个 TZ,并在“商店”时间向服务器报告。
服务器时间为 UTC,时间戳以 unix 秒为单位。“店”TZ是众所周知的。
问题是我使用了几个 jquery 插件(datetimepicker 和日历),它们在内部利用浏览器本地时间,并且有几千行代码需要分析和修复,使其不太受支持 - (布鲁塞尔 | 任何其他 TZ 中的浏览器)每个“新日期()”将获得本地浏览器时间。也有一些狭窄的地方(因为这些假想的“理发店”位于世界各地并且是从地图中挑选出来的,所以目标 TZ 是动态的)。
通常的做法是什么?
是不是更容易
非常感谢
PS 我已经阅读了最佳实践- 但正如我所说,我一定会使用特定的插件。
解决方案:
我意识到我不需要这些日期时间的相对值,因为我从不需要在时间上比较不同“理发店”的书籍(每个“商店”都有纬度/经度,如果需要,我仍然可以重新计算相对时间)。
基本上,无论时区如何,我都只需要绝对UTC 值,在这种情况下,unix 时间(自 1970 年 UTC 以来的秒数)非常适合。
现在我没有在客户端通过用户浏览器偏移量更正时间,将其发送到后端,并通过目标偏移量将其固定在那里,而是在客户端和服务器/数据库端以明确的 UTC 日期运行整个系统,存储和显示所有角色,只有日期/时间过滤器除外,它们绑定到本地浏览器时钟并且不存储在任何地方。
好吧,似乎有很多类似的问题,但我找不到可以回答这个特定问题的问题..所以这里是..
有一个可用的 Kendo UI 网格。我的数据源正在返回一个时间戳 - 这是返回到代码的 JSON 响应:

您会注意到下一行也是一个日期.. 由 MySQL 作为标准 DateTime 格式返回 - 我很乐意直接使用它。但我已将日期转换为我认为更通用的时间戳。(??)
现在我需要做两件事 - 将时间戳格式化为可读日期并编辑日期,以便将其保存回数据源。但让我们先解决格式问题。
我当前显示列的代码如下所示:
{ title: "Trial<br>Date",
field: "customer_master_converted_to_customer_date",
format: "{0:d/M/yyyy}",
attributes: {
style: "text-align: center; font-size: 14px;"
},
filterable: true,
headerAttributes: {
style: "font-weight: bold; font-size: 14px;"
}
},
Run Code Online (Sandbox Code Playgroud)
虽然我试过了..
toString(customer_master_converted_to_customer_date, "MM/dd/yyyy")
Run Code Online (Sandbox Code Playgroud)
.. 以及它的几种变体 - 在格式字符串方面。是的,我试过输入:
type: "date",
Run Code Online (Sandbox Code Playgroud)
无论我做什么,我都只得到时间戳。

任何人?
我有一个32位的Linux系统,我必须在其中记录带有时间戳的数据,该时间戳是从1901-01-01 00:00:00的纪元开始的UINT32秒偏移.
计算时间戳对我来说没关系,因为我可以使用64位ticks()计数器和ticks_per_second()函数来生成自纪元以来的秒数,如下所示(我只需要二级分辨率)
const ptime ptime_origin(time_from_string("1901-01-01 00:00:00"));
time_duration my_utc = microsec_clock::universal_time() - ptime_origin;
boost::int64_t tick_per_sec = my_utc.ticks_per_second();
boost::int64_t tick_count = my_utc.ticks();
boost::int64_t sec_since_epoch = tick_count/tick_per_sec;
Run Code Online (Sandbox Code Playgroud)
这对我有用,因为我知道作为无符号整数,秒数不会超过最大UINT32值(不管多少年都没有).
我的问题是我的应用程序可以接收包含UINT32值的modbus消息,我必须ioctl使用调用来设置硬件和系统时钟RTC_SET_TIME.此UINT32再次是自我的纪元1901-01-01 00:00:00以来的秒数偏移量.
我现在的问题是我无法使用64位整数创建一个ptime对象 - 对象的ticks一部分time_duration是私有的,我被限制使用long哪个在我的32位系统上只是一个4字节的有符号整数,不足以存储从我的纪元偏离的秒数.
我无法控制时代的价值,所以我真的很难过如何boost::posix_time::ptime从我拥有的数据中创建我所需的对象.我可以通过计算特定时间间隔的硬第二次计数并使用额外的纪元来建立一个允许这种情况的桥来获得一个肮脏的解决方案,但我想知道boost代码中是否有某些内容可以让我完全使用提升日期时间库.我已经阅读了所有可以找到的文档,但是我看不到任何明显的方法.
编辑:我发现这个相关的问题将int64_t转换为time_duration但是接受的答案对我的纪元不起作用
我正在使用 org.joda.time.LocalDate 和 LocalDateTime。我从外部来源获得了一个 Unix 时间戳,并希望从中生成一个 LocalDate(Time)。关键是,它在该外部系统的界面中定义,所有日期/时间都在 UTC 时区。所以我想避免从该时间戳到本地系统的任何默认时区的任何隐式转换,这可能与 UTC 不同。对于此类事情,有一个 LocalDateTime 的构造函数,所以我尝试了(例如):
System.out.println(new LocalDateTime(3600000L));
--> 1970-01-01T02:00:00.000
System.out.println(new LocalDateTime(3600000L, DateTimeZone.UTC));
--> 1970-01-01T01:00:00.000
Run Code Online (Sandbox Code Playgroud)
结果有点出乎我的意料。查看 JavaDoc,第一个构造函数评估时间戳“在默认区域中使用 ISO 年表”。根据定义,Unix 时间戳是从 01-JAN-1970T00:00:00UTC 开始的秒数(这里是毫秒)!因此,如果将值 3600000(= 恰好 2 小时(以毫秒为单位)添加到该基数中,它将变为 01-JAN-1970T02:00:00UTC。我的本地系统设置为欧洲/柏林 (CET) 时区,即 UTC+1。准确地说,我们现在有夏令时,所以它甚至应该是 UTC+2,但让我们假设我们现在处于 UTC+1。因此,如果时间戳根据定义是 UTC,那么我希望结果时间是 01:00:00,如果它将时间戳的值解释为转换为 UTC 的 CET,或者 03:00:00 如果它正确地期望时间戳具有转换为 CET 的 UTC 值。但它实际上显示了一个未转换的时间戳,正好偏离基地 2 小时。第二个构造函数应该评估“在指定区域中使用 ISO 年表”的时间戳。(来自 JavaDoc)因此,如果我明确指定 UTC 时区,我根本不会期望任何转换,而是 02:00:00 的时间。一个基于 UTC 的时间戳会导致一个本身被声明为 UTC 的时间,结果应该是这样,但结果是 01:00:00!只是为了仔细检查,我用 CET 显式调用它并得到相同的结果,就好像我不提供任何时区一样。(来自 JavaDoc)因此,如果我明确指定 UTC 时区,我根本不会期望任何转换,而是 02:00:00 的时间。一个基于 UTC 的时间戳会导致一个本身被声明为 UTC 的时间,结果应该是这样,但结果是 01:00:00!只是为了仔细检查,我用 CET 显式调用它并得到相同的结果,就好像我不提供任何时区一样。(来自 JavaDoc)因此,如果我明确指定 UTC …
我正在尝试创建一个redis有序集.问题在于需要根据两个标准(时间戳和分数)进行排序.但在redis中,我只能提供一个评分标准:
ZADD {key} {timestamp} {value}
Run Code Online (Sandbox Code Playgroud)
如何在此排序中添加分数以及PLZ?
更新: 这是我将两个不同的排序因子合并为一个浮点数值的方法:
var score = Math.floor(result.created_time/(60*60*24*1000));
score = score + (result.matches/10);
Run Code Online (Sandbox Code Playgroud)
只是为了解释一下,我先把时间戳转换为天数.我的'匹配'值通常是0-10.因此,转换为十进制值并添加为分数权重.这给了我最高得分的条目,每天排序.这正是我所需要的.
因此,例如下面是我的Cassandra实例生成的时间戳.+0000是什么意思?
2015-06-26 17:02:04+0000
谢谢
我在 java 和 javascript 之间的时间戳有问题。
我已经找到了关于时间戳的这两个问题,并且我知道这些年来的时间变化。
旧日期的时间戳偏差 Java 与 Javascript(3600 秒)
基本上在 1927 年底的午夜,时钟倒退了 5 分 52 秒。因此,“1927-12-31 23:54:08”实际上发生了两次,看起来 Java 正在将其解析为该本地日期/时间的较晚可能时刻。
问题在于,当我使用 javascript 并将时间戳放在那里时,我会得到一个不同于 Java 日期的日期。我需要这个来在网页上显示正确的日期。我知道我可以将日期作为字符串请求,但我更喜欢使用时间戳。
Java 日期 0001-01-01 时间戳是 -62135773200000
JavaScript 日期 0001-01-01 时间戳是 -62135596800000
差值为-176400000;49 小时。
有谁知道我可以为此做些什么。