我正在尝试将 jquery 日历插件集成到我的自定义 cms 中,
我的问题是事件显示在设置原始值(在数据库中)的第二天。
这就是我检索事件的方式:
$query = "SELECT id,avatar, titulo AS title,texto as name, unix_timestamp(start_date) as start,unix_timestamp(end_date) as end, start_date, end_date
FROM blogs
WHERE (unix_timestamp(start_date) >= '$start' OR unix_timestamp(end_date) <= '$end')
AND post_type = 'event'
AND lan = '$lan'";
//echo $query;
$year = date('Y');
$month = date('m');
$result = mysql_query($query);
$array = array();
$i = 0;
while ($row = mysql_fetch_array($result)) {
$raw = $row;
$raw['url'] = '/blog/'.urls_amigables($raw['title']).'/'.$raw['id'].'/';
$raw['start_show'] = prettyDateTime($raw['start_date']);
$raw['end_show'] = prettyDateTime($raw['end_date']);
$array[$i] = $raw;
$i++;
}
echo json_encode($array);
这就是我将它们展示到 jquery calendar 中的方式:
$('#calendario').fullCalendar({
events: "/includes/json-events.php",
eventDrop: function(event, delta) {
alert(event.title + ' was moved ' + delta + ' days\n' +
'(should probably update your database)');
},
loading: function(bool) {
if (bool) $('#loading').show();
else $('#loading').hide();
},
eventMouseover: function( event, jsEvent, view ) {
var item = $(this);
var image = '';
if(event.avatar != '')
image = '<img src="'+event.avatar+'" />';
if(item.find('.nube').length == 0){
var info = '<span class="nube"><h2>'+event.title+'</h2>'+image+' <p class="text">'+event.name+'</p><p>'+event.start_show+' <br /> '+event.end_show+'</p><p><a href="'+event.url+'">read_more</a></p></span>';
item.append(info);
}
if(parseInt(item.css('top')) <= 200){
item.find('.nube').css({'top': 20,'bottom':'auto'});
item.parent().find('.fc-event').addClass('z0');
}
if(parseInt(item.css('left')) > 500){
item.find('.nube').css({'right': 0,'left':'auto'});
item.parent().find('.fc-event').addClass('z0');
}
item.find('.nube').stop(true,true).fadeIn();
console.log(parseInt(item.css('left')));
},
eventMouseout: function( event, jsEvent, view ) {
var item = $(this);
item.find('.nube').stop(true,true).fadeOut();
},
header: {
left: 'prev,next today',
center: 'title',
right: 'month,agendaWeek,agendaDay'
},
eventRender: function(event, element) {
}
});
这里的问题是 unix_timestamp(start_date) 会在日历中生成第二天
(例如:如果开始日期存储在该月的第 17 天,则在日历中将出现在第 18 天)
而且我不确定我错过了什么。所有这一切都是我按照他们的规范做的......
知道我哪里失败了吗? (jquery、mysql 或时区设置?)
-编辑-
我修复了它
$row['start'] = $row['start'] - 60*60*24 /* One day */;
所以现在 start_date 和 start 一起有意义(在日历中...)
请告诉我你知道更好的解决方案!
最佳答案
根据章节MySQL 5.6 引用手册p - 12.7 Date and Time Functions
UNIX_TIMESTAMP() assumes that its argument is a datetime value in the current time zone.
有必要检查浏览器位于哪个时区,并对此进行补偿,以及对浏览器查看事件进行补偿。
以下是处理上述与浏览器/PHP/MySQL 上的时间戳相关的问题的资源。
解决方案是对所有插入使用 UTC 时间戳,并且在查看事件日历时仅使用不同的时间戳进行可视化。
1) 在 Javascript 中获取当前时间
ISO 8601 日期格式可用于将浏览器端的日期转换为包含时间戳信息的格式。引自 here :
Note that the "T" appears literally in the string, to indicate the beginning of the time element. Times are expressed in UTC (Coordinated Universal Time), with a special UTC designator ("Z"). Used in ATOM RSS feeds.
1: function fnISO() { 2: // Only works in Firefox using ECMAScript 5 3: var now = new Date().toISOString(); 4: alert(now); 5: }
结果:2009-08-06T23:36:31.390Z
2) 将 ISO 8601 日期从 PHP 插入到 MYSQL
ISO 8601 日期(作为字符串)可以使用 strtotime() 转换为 PHP 日期对象功能。
strtotime($_POST['event_time_as_ISO8601']);
在脚本的开头,我会使用以下设置 PHP 默认时区和 MySQL 时区(用于连接):
date_default_timezone_set('UTC');$this->MySQLi->query("SET timezone = 'UTC'");3) 服务于客户
必须将日期转换为浏览器的时区才能正确查看。
同样,PHP 和 SQL 连接时区应该同步。可以使用 PHP date function 在 JSON 文档中以 ISO 8601 格式打印日期之后的日期.
date("c", $raw['start_date']));
4) 将 ISO 8601 日期转换为用户时区(浏览器):
所需要做的就是解析 ISO 8601 日期并创建日期对象。由于 ISO 8601 包含时区(如果是 UTC,则为 Z),因此将显示正确的日期时间。
一个解决方案是 datejs 库,如 Help parsing ISO 8601 date in Javascript 中所述.
另请参阅:
关于php - jquery 全日历显示第二天的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17177550/
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我试图在索引页中创建一个超链接,但它没有显示,也没有给出任何错误。这是我的index.html.erb代码。ListingarticlesTitleTextssss我检查了我的路线,我认为它们也没有问题。PrefixVerbURIPatternController#Actionwelcome_indexGET/welcome/index(.:format)welcome#indexarticlesGET/articles(.:format)articles#indexPOST/articles(.:format)articles#createnew_articleGET/article
我是rails的新手,想在form字段上应用验证。myviewsnew.html.erb.....模拟.rbclassSimulation{:in=>1..25,:message=>'Therowmustbebetween1and25'}end模拟Controller.rbclassSimulationsController我想检查模型类中row字段的整数范围,如果不在范围内则返回错误信息。我可以检查上面代码的范围,但无法返回错误消息提前致谢 最佳答案 关键是您使用的是模型表单,一种显示ActiveRecord模型实例属性的表单。c
rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
目前,Itembelongs_toCompany和has_manyItemVariants。我正在尝试使用嵌套的fields_for通过Item表单添加ItemVariant字段,但是使用:item_variants不显示该表单。只有当我使用单数时才会显示。我检查了我的关联,它们似乎是正确的,这可能与嵌套在公司下的项目有关,还是我遗漏了其他东西?提前致谢。注意:下面的代码片段中省略了不相关的代码。编辑:不知道这是否相关,但我正在使用CanCan进行身份验证。routes.rbresources:companiesdoresources:itemsenditem.rbclassItemi
如果我在模型中设置验证消息validates:name,:presence=>{:message=>'Thenamecantbeblank.'}我如何让该消息显示在闪光警报中,这是我迄今为止尝试过的方法defcreate@message=Message.new(params[:message])if@message.valid?ContactMailer.send_mail(@message).deliverredirect_to(root_path,:notice=>"Thanksforyourmessage,Iwillbeintouchsoon")elseflash[:error]
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).