- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以,我想做的是实现一个数据范围选择,它不显示两个日期选择器“从”和“到”。我想让用户在今天、昨天、上周、上个月等之间进行选择。
我在服务器端的应用程序中有类似的东西,但是: 1- 代码看起来很糟糕; 2- 我希望 API 接收“从”和“到”日期,我只希望用户看到一个友好的日期范围选择。
附加信息:我的前端基于 AngularJS。
我希望它看起来像这样:
服务器端的实际代码是这样的:
var today = DateTime.Now.Date;
if (dateRange == (int)DateRange.Custom)
{
var start = DateTime.ParseExact(dateFrom, "dd/MM/yyyy", null);
var end = DateTime.ParseExact(dateTo, "dd/MM/yyyy", null).AddDays(1);
query = query.Where(ss => ss.DateRecevied >= start && ss.DateRecevied < end);
return query;
}
if (dateRange == (int)DateRange.Today)
{
query = query.Where(ss => ss.DateRecevied >= today);
return query;
}
if (dateRange == (int)DateRange.Yesterday)
{
var dateShift = today.AddDays(-1);
query = query.Where(ss => ss.DateRecevied >= dateShift && ss.DateRecevied < today);
return query;
}
if (dateRange == (int)DateRange.ThisWeekFromSunToday)
{
var dt = DateTime.Now.StartOfWeek(DayOfWeek.Sunday);
query = query.Where(ss => ss.DateRecevied >= dt);
return query;
}
if (dateRange == (int)DateRange.ThisWeekFromMonToday)
{
var dt = DateTime.Now.StartOfWeek(DayOfWeek.Monday);
query = query.Where(ss => ss.DateRecevied >= dt);
return query;
}
if (dateRange == (int)DateRange.Last7Days)
{
var dateShift = today.AddDays(-7);
query = query.Where(ss => ss.DateRecevied >= dateShift);
return query;
}
if (dateRange == (int)DateRange.Last14days)
{
var dateShift = today.AddDays(-14);
query = query.Where(ss => ss.DateRecevied >= dateShift);
return query;
}
if (dateRange == (int)DateRange.ThisMonth)
{
var dateShift = new DateTime(today.Year, today.Month, 1);
query = query.Where(ss => ss.DateRecevied >= dateShift);
return query;
}
if (dateRange == (int)DateRange.Last30days)
{
var dateShift = today.AddDays(-30);
query = query.Where(ss => ss.DateRecevied >= dateShift);
return query;
}
if (dateRange == (int)DateRange.LastMonth)
{
var dateShift = new DateTime(today.Year, today.Month, 1);
var dateShift2 = dateShift.AddMonths(-1);
query = query.Where(ss => ss.DateRecevied >= dateShift2 && ss.DateRecevied < dateShift);
return query;
}
if (dateRange == (int)DateRange.AllTime)
{
query = query.AsQueryable();
return query;
}
if (dateRange == (int)DateRange.Last90Days)
{
var dateShift = today.AddDays(-90);
query = query.Where(ss => ss.DateRecevied >= dateShift);
return query;
}
if (dateRange == (int)DateRange.LastWeekFromMonSun)
{
var dateLastWeekMonday = DateTimeExtensions.GetDateForLastWeekMonday(today);
var dateLastWeekSun = DateTimeExtensions.GetDateForLastWeekSun(today).AddDays(1);
query = query
.Where(ss =>
ss.DateRecevied >= dateLastWeekMonday
&&
ss.DateRecevied < dateLastWeekSun);
return query;
}
if (dateRange == (int)DateRange.LastWorkingWeekFromMonFri)
{
var dateLastWeekMonday = DateTimeExtensions.GetDateForLastWeekMonday(today);
var dateLastWeekFri = DateTimeExtensions.GetDateForLastWeekFri(today).AddDays(1);
query = query
.Where(ss =>
ss.DateRecevied >= dateLastWeekMonday
&&
ss.DateRecevied < dateLastWeekFri);
return query;
}
return query;
最佳答案
我最终使用了 MomentJS 库 ( http://momentjs.com ) 并在我的 AngularJS 应用程序上创建了一个新模块。
我将它上传到 GitHub 以供 future 的访问者使用:https://github.com/renatocarrico/js-libraries/blob/master/human-date-range.js
代码(如果链接无法打开):
var options = [{ name: "Custom", id: 1 }, { name: "Today", id: 2 }, { name: "Yesterday", id: 3 }, { name: "This Week (Sun - Today)", id: 4 }, { name: "This Week (Mon - Today)", id: 5 }, { name: "Last 7 Days", id: 6 }, { name: "Last Week (Mon - Sunday)", id: 7 }, { name: "Last Business Week (Mon - Fri)", id: 8 }, { name: "Last 14 days", id: 9 }, { name: "This Month", id: 10 }, { name: "Last 30 Days", id: 11 }, { name: "Last Month", id: 12 }, { name: "Last 90 Days", id: 13 }];
var selectedOption = 2;
function setSelectedOption (optionId) {
selectedOption = optionId;
};
function getOptions() {
return options;
};
function getFromDate() {
//Today
if (selectedOption == 2) {
return new Date();
}
//Yesterday
if (selectedOption == 3) {
return moment().subtract(1, 'd').toDate();
}
//This Week (Sun - Today)
if (selectedOption == 4) {
return moment().day("Sunday").toDate();
}
//This Week (Mon - Today)
if (selectedOption == 5) {
return moment().day("Monday").toDate();
}
//Last 7 Days
if (selectedOption == 6) {
return moment().subtract(7, 'd').toDate();
}
//Last Week (Mon - Sunday)
if (selectedOption == 7) {
return moment().day('Monday').subtract(1, 'w').toDate();
}
//Last Business Week (Mon - Fri)
if (selectedOption == 8) {
return moment().day('Monday').subtract(1,'w').toDate();
}
//Last 14 days
if (selectedOption == 9) {
return moment().subtract(14, 'd').toDate();
}
//This Month
if (selectedOption == 10) {
return moment().startOf('month').toDate();
}
//Last 30 Days
if (selectedOption == 11) {
return moment().subtract(30, 'd').toDate();
}
//Last Month
if (selectedOption == 12) {
return moment().startOf('month').subtract(1,'M').toDate()
}
//Last 90 Days
if (selectedOption == 13) {
return moment().subtract(90, 'd').toDate();
}
}
function getToDate() {
//Today
if (selectedOption == 2) {
return new Date();
}
//Yesterday
if (selectedOption == 3) {
return moment().subtract(1, 'd').toDate();
}
//This Week (Sun - Today)
if (selectedOption == 4) {
return new Date();
}
//This Week (Mon - Today)
if (selectedOption == 5) {
return new Date();
}
//Last 7 Days
if (selectedOption == 6) {
return new Date();
}
//Last Week (Mon - Sunday)
if (selectedOption == 7) {
return moment().day(0).toDate();
}
//Last Business Week (Mon - Fri)
if (selectedOption == 8) {
return moment().day(-2).toDate();
}
//Last 14 days
if (selectedOption == 9) {
return new Date();
}
//This Month
if (selectedOption == 10) {
return moment().endOf('month').toDate();
}
//Last 30 Days
if (selectedOption == 11) {
return new Date();
}
//Last Month
if (selectedOption == 12) {
return moment().subtract(1, 'M').endOf('month').toDate();
}
//Last 90 Days
if (selectedOption == 13) {
return new Date();
}
}
关于javascript - 如何使用 HTML/JS 实现 'human' 日期范围选择下拉列表? (今天、昨天、上周……),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32498397/
我们想利用 Humanizer package (因为我们在其他地方使用它)并且不想添加更多类似的库或手工代码。 我有一些时间跨度,其中一些是数千天。我想将它们人性化并将它们转换为年份。现在我很欣赏一
public class Human implements Comparable { private int age; private String name; public
我无法从 Homecontrollers 操作方法调用新的 Human 对象。 var employee = new Human { id = 1, name = "home inde
内置的 .Net 方法 TextInfo.ToTitleCase 可以很好地处理法语句子,但有些示例会导致问题,请参阅 remarks (复制如下): Generally, title casing
为了好玩,我制作了这个牌组洗牌功能来模仿人们如何不完美地洗牌。他们将其切成近两半,并使用“褶边”方法将左右甲板交织在一起,然后重复此过程任意多次。甲板永远不会完美地编织在一起。您可以将它们打乱,如 L
我有一款在线角色扮演游戏,我很认真地对待它。最近我遇到了用户使用假名制作假字符的问题,只是一堆不同的字母。就像 Ghytjrhfsdjfnsdms、Yiiiedawdmnwe、Hhhhhhhhhhej
我正在寻找一种算法,该算法可以告诉我照片/网络摄像头实时Feed上的眼睛在哪里。 我已经进行了很多搜索,但是现在我不想从很多复杂性入手。 只是为了好玩而已。我的想法是要采用某种方法来接收图像并返回与用
为了防止对我的 django 站点的 DOS 类型的攻击,我正在考虑显示一个验证码页面,如果我的网络应用程序经常受到某个 IP 的攻击。类似于当你表现出过多的事件时 SO 正在做的事情。 在 Djan
我正在使用此代码将字节转换为更易读的格式,例如155K, 1.5M, 1.5G,但是从CPAN上的解释看不出转换后的值如何打印到小数点后第二位并四舍五入。谢谢。 use strict; use war
我最近尝试过Humanizer.Js 。我从 here 添加了相同的 nuget 引用,并将其添加到我的页面中,名称为 。但是在我的页面加载中我收到错误:“未捕获类型错误:无法读取未定义的属性‘原型
我正在开发一个 Django 应用程序,它有 LANGUAGE_CODE设置为es西类牙语。 我正在尝试格式化数字在模板中的呈现方式。现在它们呈现为: S/ 18,00当S/ 18.00需要。 我搜索
class Address { private enum Component { NUMBER, STREET, STATE, COUNTRY } pr
我已经成功地使用 Humanizer 将英语单词单数化/复数化, 但当我将 CultureInfo 设置为意大利语时,它只会向单词添加一个额外的“s”。 例如: "Man".Pluralize() =
是否有一个 shell 命令可以简单地在以字节为单位的数字字符串和某些命令通过 -h 提供的“人类可读”的数字字符串之间来回转换选项? 澄清问题:ls -l没有 -h选项(某些输出被抑制) > ls
我已经学习ANTLR几天了。我学习它的目标是我将能够生成解析器和词法分析器,然后亲自将它们从 Java 手动翻译成我的目标语言(C/C++/Java/C#/Python,没有工具支持它)。我选择 AN
我正在使用 Python Humanize module 来格式化一些文件大小信息。该模块默认保留一位小数,有没有办法返回具有不同小数位的值? 这是默认值: >>> humanize.naturals
我想在模板之外使用django.contrib. humanize,实际上是在模型内部使用来人性化一些短信中的某些日期。 这可能吗?我怎样才能做到这一点? 最佳答案 您可以导入模型中的函数: from
PAYCODE_BLUEPAY = "BLUEPAY" PAYCODE_HEARTLAND = "HEARTLAND" PAYCODE_1STPAY = "1STPAYMENT" PAYCODE_CH
希望实现按功能排名/排序,按照我们人类认为相关的方式对产品进行排名,而不是计算机认为相关的方式。目前我有这个sql语句 select MATCH(productName) AGAINST('xyz'
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 7年前关闭。 Improve this qu
我是一名优秀的程序员,十分优秀!