গোতে তারিখ তুলনা করার কোনও বিকল্প আছে কি? আমাকে তারিখ এবং সময় অনুসারে ডেটা বাছাই করতে হবে - স্বতন্ত্রভাবে। সুতরাং আমি তারিখের একটি পরিসীমা মধ্যে ঘটতে পারে যে একটি অবজেক্ট এত দীর্ঘ সময় এর মধ্যে ঘটে হিসাবে অনুমতি দিতে পারে। এই মডেলটিতে আমি কেবল প্রাচীনতম তারিখ, সর্বকনিষ্ঠ সময় / সর্বশেষ তারিখ, সর্বশেষ সময় এবং ইউনিক্স () সেকেন্ডের তুলনা করতে পারিনি। আমি সত্যিই কোন পরামর্শ প্রশংসা করব।
শেষ পর্যন্ত, আমি একটি সময় পার্সিংয়ের স্ট্রিং তুলনা মডিউল লিখেছিলাম যে কোনও সময় কোনও সীমার মধ্যে রয়েছে কিনা তা পরীক্ষা করতে। তবে এটি ভাল লাগার মতো নয়; আমি কিছু ফাঁক সমস্যা পেয়েছি। আমি এখানে কেবল মজাদার জন্য পোস্ট করব, তবে আমি আশা করি সময়ের তুলনার আরও ভাল উপায় আছে।
package main
import (
"strconv"
"strings"
)
func tryIndex(arr []string, index int, def string) string {
if index <= len(arr)-1 {
return arr[index]
}
return def
}
/*
* Takes two strings of format "hh:mm:ss" and compares them.
* Takes a function to compare individual sections (split by ":").
* Note: strings can actually be formatted like "h", "hh", "hh:m",
* "hh:mm", etc. Any missing parts will be added lazily.
*/
func timeCompare(a, b string, compare func(int, int) (bool, bool)) bool {
aArr := strings.Split(a, ":")
bArr := strings.Split(b, ":")
// Catches margins.
if (b == a) {
return true
}
for i := range aArr {
aI, _ := strconv.Atoi(tryIndex(aArr, i, "00"))
bI, _ := strconv.Atoi(tryIndex(bArr, i, "00"))
res, flag := compare(aI, bI)
if res {
return true
} else if flag { // Needed to catch case where a > b and a is the lower limit
return false
}
}
return false
}
func timeGreaterEqual(a, b int) (bool, bool) {return a > b, a < b}
func timeLesserEqual(a, b int) (bool, bool) {return a < b, a > b}
/*
* Returns true for two strings formmated "hh:mm:ss".
* Note: strings can actually be formatted like "h", "hh", "hh:m",
* "hh:mm", etc. Any missing parts will be added lazily.
*/
func withinTime(timeRange, time string) bool {
rArr := strings.Split(timeRange, "-")
if timeCompare(rArr[0], rArr[1], timeLesserEqual) {
afterStart := timeCompare(rArr[0], time, timeLesserEqual)
beforeEnd := timeCompare(rArr[1], time, timeGreaterEqual)
return afterStart && beforeEnd
}
// Catch things like `timeRange := "22:00:00-04:59:59"` which will happen
// with UTC conversions from local time.
// THIS IS THE BROKEN PART I BELIEVE
afterStart := timeCompare(rArr[0], time, timeLesserEqual)
beforeEnd := timeCompare(rArr[1], time, timeGreaterEqual)
return afterStart || beforeEnd
}
তাই টিএলডিআর, আমি একটি টাইমরেঞ্জ (সীমা, সময়) ফাংশন লিখেছি তবে এটি পুরোপুরি সঠিকভাবে কাজ করছে না। (প্রকৃতপক্ষে, বেশিরভাগ ক্ষেত্রে কেবল দ্বিতীয় ক্ষেত্রে, যেখানে কয়েক দিনের মধ্যে একটি সময়সীমা অতিক্রম করা হয় The মূল অংশটি কাজ করেছিল, আমি ঠিক বুঝতে পেরেছিলাম স্থানীয় থেকে ইউটিসি-তে রূপান্তর করার সময় আমাকে তার জন্য অ্যাকাউন্টিং করতে হবে))
যদি আরও ভাল (পছন্দসই অন্তর্নির্মিত) উপায়ে থাকে তবে আমি এটি সম্পর্কে শুনতে আগ্রহী!
দ্রষ্টব্য: যেমন একটি উদাহরণ হিসাবে, আমি জাভাস্ক্রিপ্টে এই সমস্যাটি দিয়ে এই সমস্যাটি সমাধান করেছি:
function withinTime(start, end, time) {
var s = Date.parse("01/01/2011 "+start);
var e = Date.parse("01/0"+(end=="24:00:00"?"2":"1")+"/2011 "+(end=="24:00:00"?"00:00:00":end));
var t = Date.parse("01/01/2011 "+time);
return s <= t && e >= t;
}
তবে আমি সত্যিই এই ফিল্টারটি সার্ভার-সাইড করতে চাই।