จาก Code และภาค มีวิธีทำให้มันเป็นรูปแบบ dd-MM-yyyy ไหมครับ ผมลองเปลี่ยนดูแล้วทำไม่ได้ C# Code ทดสอบ ตามภาพแล้วทำไม่ได้ ต้องทำยังไงมีวิธีแนะนำผมหน่อยครับ
Code (C#)
string.Format("{0:dd-MMM-yyyy HH:mm}", Convert.ToDateTime(sDate));
Date :
2018-12-14 09:38:23
By :
mr.win
Code (C#)
public static string DisplayDateTime(object sDate)
{
try
{
if (sDate == System.DBNull.Value || sDate == null || sDate.ToString() == string.Empty)
{
return string.Empty;
}
else
{
return string.Format("{0:dd-MMM-yyyy HH:mm}", Convert.ToDateTime(sDate));
}
}
catch (Exception ex)
{
return sDate.ToString();
}
}
Date :
2018-12-14 09:38:42
By :
mr.win
ประวัติการแก้ไข 2018-12-14 11:02:19
Date :
2018-12-14 10:57:23
By :
outhai
@Wiraphon
ถามสิบคนคำตอบมันก็ไม่แตกต่างกับคนที่่สิบเอ็ด "เอิ้นว่า"
--- Web Forms Application ตายแล้ว (ดูจาก .NET Core xx.xx มันถอกออกไปหมดเลย)
มีอยู่ทางเดียวเท่านั้นที่ทำให้มันไม่ตายนั่นก็คือ ทำทุกฯทาง ห้าม PostBack เช่น
Code (XML)
<asp:TextBox type="date" ID="TextBox3" runat="server" Width="151px" name="party-time" Height="22px" >
ก็เปลี่ยนเป็น
Code (XML)
<input type="text" id="txtTotalPrice" value="123.456" />
และใช้ JavaScript/Jquery ช่วย อทิเช่น
query.inputmask.date.extensions.js หรือตัวอื่นฯตามที่พึงพอใจ หาง่ายยิ่งกว่าจ่ายเงินให้กาหลีเสียอีก
หรือจะเขียนเองก็ได้
ชี้เป้าให้แล้ว ถ้ายิงปืนไม่เป็น ก็เปลี่ยนอาชีพไปขายประกัน/etc... อย่ามาเลยทางสายโปรแกรมเมอร์
Date :
2018-12-16 21:31:19
By :
หน้าฮี
จาก #NO5 ผมประเมินดูแล้วมันดูโหดร้ายเกินไป (ใครจะไปรู้ มีน้องสาวหลายคนและแต่ละคนสวยฯทั้งนั้น ก็อาจเป็นไปได้)
ลองศึกษาดู TypeScript/Angular/NodeJS
เผื่อจะเจอในสิ่งที่ใช่ และเหมาะกับตัวเอง ก็อาจเป็นไปได้เหมือนกัน
ปล. ผมใช้มาหมดแล้ว แต่ใช้ไม่เคยหมด มีพันผมใช้แค่หนึ่ง
Code (XML)
<script src="<%= Page.ResolveUrl("~/")%>Scripts/angular.min.js"></script>
<script src="<%= Page.ResolveUrl("~/")%>Scripts/angular-route.min.js"></script>
<script src="<%= Page.ResolveUrl("~/")%>Scripts/angular-animate.min.js"></script>
<script type="text/javascript">
angular.element(document.getElementsByTagName('head')).append(angular.element('<base href="' + window.location.pathname + '" />'));
</script>
Date :
2018-12-16 21:40:52
By :
หน้าฮี
จาก #NO6 ผมใช้ Angular จุดประสงค์ 3 ข้อ คือ
1. เปลี่ยน Page ไม่ให้มัน Refresh All Browser
---- เช่นเปลี่ยนจาก PageA --> PageB ---> PageBที่หาร เป็นต้น
2. ไม่ให้ Web Forms มันตาย ดังคำร่ำลือ
3. อินเทนด์/ใหม่มา เก่าก็ยังอยู่ พวกเอ็งใช้เป็น ตรูก็ใช้เป็น
---- สิ่งที่ดูดีและเหนือกว่านั่นคือ ตรูรู้จักประยุกต์ใช้
Date :
2018-12-16 21:54:37
By :
หน้าฮี
เดี๋ยวจะหาว่ามั่ว เปลี่ยนเพจ (PageA --> PageB --> PageC --> etc...)
แบบว่าหมอยไม่กระดิก แม้ใช้พัดลมงานวัดเป่า
Code (JavaScript)
(function (angular) {
'use strict';
angular.module('ngViewPIS', ['ngRoute', 'ngAnimate'])
.run(function ($rootScope) {
$rootScope.xShow = false;
})
.config(['$routeProvider', '$locationProvider',
function ($routeProvider, $locationProvider) {
$routeProvider
.when('/assPO', { // ใบสั่งซื้อ
templateUrl: './assPO/PO.html', //เห็นไหมว่าตรูไม่ได้ใช้ .aspx/Razor Page
controller: 'assPOCtrl',
controllerAs: 'assPO'
})
.otherwise({
redirectTo: '/'
});
//Hacks .NET/.NET Standard Exclude .NET Core
$locationProvider.html5Mode(true);
}])
.controller('MainCtrl', ['$route', '$routeParams', '$location', '$scope',
function MainCtrl($route, $routeParams, $location, $scope) {
this.$route = $route;
this.$location = $location;
this.$routeParams = $routeParams;
}])
})(window.angular);
Date :
2018-12-16 22:02:43
By :
หน้าฮี
จาก #NO8 บรรทัดที่ 11 ผลพลอยได้นั่นก็คือ เอา Source Code บน .NET 4.8.x/ .NET Standard ไปวิ่งบน
.NET Core 2.x/3.x ได้แบบสะบายสะบาย แถมใช้ VB.NET เป็นหลักได้อีกต่างหาก
แต่แต่แต่ ผมพยายามปรับไปใช้ C# .ให้มากที่สุดเท่าที่เป็นไปได้ ยกเว้น อะไรที่สำคัญฯ ผมก็ใช้ VB.NET
แก่นผมใช้ VB.NET 10%
อื่นฯผมใช้ C# 90%
อันนี้คือสิ่งที่คิดเอาไว้ ทำเมื่อไหร่ก็ย่อมได้ และ ทำหรือไม่ทำ มันก็มีค่าเท่ากัน
Date :
2018-12-16 22:38:11
By :
หน้าฮี
Quote: https://searchcode.com/codesearch/view/96022964/
ผมเป็นคนโง่เกินกว่าที่จะฉลาดได้ ไม่ว่าจะใช้ควยพยายามเท่าไหร่ก็ตาม
Code (JavaScript)
/*
Input Mask plugin extensions
http://github.com/RobinHerbots/jquery.inputmask
Copyright (c) 2010 - 2014 Robin Herbots
Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
Version: 0.0.0
Optional extensions on the jquery.inputmask base
*/
(function ($) {
//date & time aliases
$.extend($.inputmask.defaults.definitions, {
'h': { //hours
validator: "[01][0-9]|2[0-3]",
cardinality: 2,
prevalidator: [{ validator: "[0-2]", cardinality: 1 }]
},
's': { //seconds || minutes
validator: "[0-5][0-9]",
cardinality: 2,
prevalidator: [{ validator: "[0-5]", cardinality: 1 }]
},
'd': { //basic day
validator: "0[1-9]|[12][0-9]|3[01]",
cardinality: 2,
prevalidator: [{ validator: "[0-3]", cardinality: 1 }]
},
'm': { //basic month
validator: "0[1-9]|1[012]",
cardinality: 2,
prevalidator: [{ validator: "[01]", cardinality: 1 }]
},
'y': { //basic year
validator: "(19|20)\\d{2}",
cardinality: 4,
prevalidator: [
{ validator: "[12]", cardinality: 1 },
{ validator: "(19|20)", cardinality: 2 },
{ validator: "(19|20)\\d", cardinality: 3 }
]
}
});
$.extend($.inputmask.defaults.aliases, {
'dd/mm/yyyy': {
mask: "1/2/y",
placeholder: "dd/mm/yyyy",
regex: {
val1pre: new RegExp("[0-3]"), //daypre
val1: new RegExp("0[1-9]|[12][0-9]|3[01]"), //day
val2pre: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])"); }, //monthpre
val2: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))"); }//month
},
leapday: "29/02/",
separator: '/',
yearrange: { minyear: 1900, maxyear: 2099 },
isInYearRange: function (chrs, minyear, maxyear) {
var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length)));
var enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
return (enteredyear != NaN ? minyear <= enteredyear && enteredyear <= maxyear : false) ||
(enteredyear2 != NaN ? minyear <= enteredyear2 && enteredyear2 <= maxyear : false);
},
determinebaseyear: function (minyear, maxyear, hint) {
var currentyear = (new Date()).getFullYear();
if (minyear > currentyear) return minyear;
if (maxyear < currentyear) {
var maxYearPrefix = maxyear.toString().slice(0, 2);
var maxYearPostfix = maxyear.toString().slice(2, 4);
while (maxyear < maxYearPrefix + hint) {
maxYearPrefix--;
}
var maxxYear = maxYearPrefix + maxYearPostfix;
return minyear > maxxYear ? minyear : maxxYear;
}
return currentyear;
},
onKeyUp: function (e, buffer, opts) {
var $input = $(this);
if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) {
var today = new Date();
$input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString());
}
},
definitions: {
'1': { //val1 ~ day or month
validator: function (chrs, buffer, pos, strict, opts) {
var isValid = opts.regex.val1.test(chrs);
if (!strict && !isValid) {
if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) {
isValid = opts.regex.val1.test("0" + chrs.charAt(0));
if (isValid) {
buffer[pos - 1] = "0";
return { "pos": pos, "c": chrs.charAt(0) };
}
}
}
return isValid;
},
cardinality: 2,
prevalidator: [{
validator: function (chrs, buffer, pos, strict, opts) {
var isValid = opts.regex.val1pre.test(chrs);
if (!strict && !isValid) {
isValid = opts.regex.val1.test("0" + chrs);
if (isValid) {
buffer[pos] = "0";
pos++;
return { "pos": pos };
}
}
return isValid;
}, cardinality: 1
}]
},
'2': { //val2 ~ day or month
validator: function (chrs, buffer, pos, strict, opts) {
var frontValue = buffer.join('').substr(0, 3);
if (frontValue.indexOf(opts.placeholder[0]) != -1) frontValue = "01" + opts.separator;
var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
if (!strict && !isValid) {
if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) {
isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0));
if (isValid) {
buffer[pos - 1] = "0";
return { "pos": pos, "c": chrs.charAt(0) };
}
}
}
return isValid;
},
cardinality: 2,
prevalidator: [{
validator: function (chrs, buffer, pos, strict, opts) {
var frontValue = buffer.join('').substr(0, 3);
if (frontValue.indexOf(opts.placeholder[0]) != -1) frontValue = "01" + opts.separator;
var isValid = opts.regex.val2pre(opts.separator).test(frontValue + chrs);
if (!strict && !isValid) {
isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs);
if (isValid) {
buffer[pos] = "0";
pos++;
return { "pos": pos };
}
}
return isValid;
}, cardinality: 1
}]
},
'y': { //year
validator: function (chrs, buffer, pos, strict, opts) {
if (opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
var dayMonthValue = buffer.join('').substr(0, 6);
if (dayMonthValue != opts.leapday)
return true;
else {
var year = parseInt(chrs, 10);//detect leap year
if (year % 4 === 0)
if (year % 100 === 0)
if (year % 400 === 0)
return true;
else return false;
else return true;
else return false;
}
} else return false;
},
cardinality: 4,
prevalidator: [
{
validator: function (chrs, buffer, pos, strict, opts) {
var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
if (!strict && !isValid) {
var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
if (isValid) {
buffer[pos++] = yearPrefix[0];
return { "pos": pos };
}
yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2);
isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
if (isValid) {
buffer[pos++] = yearPrefix[0];
buffer[pos++] = yearPrefix[1];
return { "pos": pos };
}
}
return isValid;
},
cardinality: 1
},
{
validator: function (chrs, buffer, pos, strict, opts) {
var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
if (!strict && !isValid) {
var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear);
if (isValid) {
buffer[pos++] = yearPrefix[1];
return { "pos": pos };
}
yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
if (opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) {
var dayMonthValue = buffer.join('').substr(0, 6);
if (dayMonthValue != opts.leapday)
isValid = true;
else {
var year = parseInt(chrs, 10);//detect leap year
if (year % 4 === 0)
if (year % 100 === 0)
if (year % 400 === 0)
isValid = true;
else isValid = false;
else isValid = true;
else isValid = false;
}
} else isValid = false;
if (isValid) {
buffer[pos - 1] = yearPrefix[0];
buffer[pos++] = yearPrefix[1];
buffer[pos++] = chrs[0];
return { "pos": pos };
}
}
return isValid;
}, cardinality: 2
},
{
validator: function (chrs, buffer, pos, strict, opts) {
return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
}, cardinality: 3
}
]
}
},
insertMode: false,
autoUnmask: false
},
'mm/dd/yyyy': {
placeholder: "mm/dd/yyyy",
alias: "dd/mm/yyyy", //reuse functionality of dd/mm/yyyy alias
regex: {
val2pre: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])"); }, //daypre
val2: function (separator) { var escapedSeparator = $.inputmask.escapeRegex.call(this, separator); return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)"); }, //day
val1pre: new RegExp("[01]"), //monthpre
val1: new RegExp("0[1-9]|1[012]") //month
},
leapday: "02/29/",
onKeyUp: function (e, buffer, opts) {
var $input = $(this);
if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) {
var today = new Date();
$input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString());
}
}
},
'yyyy/mm/dd': {
mask: "y/1/2",
placeholder: "yyyy/mm/dd",
alias: "mm/dd/yyyy",
leapday: "/02/29",
onKeyUp: function (e, buffer, opts) {
var $input = $(this);
if (e.ctrlKey && e.keyCode == opts.keyCode.RIGHT) {
var today = new Date();
$input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString());
}
},
definitions: {
'2': { //val2 ~ day or month
validator: function (chrs, buffer, pos, strict, opts) {
var frontValue = buffer.join('').substr(5, 3);
if (frontValue.indexOf(opts.placeholder[5]) != -1) frontValue = "01" + opts.separator;
var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
if (!strict && !isValid) {
if (chrs.charAt(1) == opts.separator || "-./".indexOf(chrs.charAt(1)) != -1) {
isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0));
if (isValid) {
buffer[pos - 1] = "0";
return { "pos": pos, "c": chrs.charAt(0) };
}
}
}
//check leap yeap
if (isValid) {
var dayMonthValue = buffer.join('').substr(4, 4) + chrs;
if (dayMonthValue != opts.leapday)
return true;
else {
var year = parseInt(buffer.join('').substr(0, 4), 10); //detect leap year
if (year % 4 === 0)
if (year % 100 === 0)
if (year % 400 === 0)
return true;
else return false;
else return true;
else return false;
}
}
return isValid;
},
cardinality: 2,
prevalidator: [{
validator: function (chrs, buffer, pos, strict, opts) {
var frontValue = buffer.join('').substr(5, 3);
if (frontValue.indexOf(opts.placeholder[5]) != -1) frontValue = "01" + opts.separator;
var isValid = opts.regex.val2pre(opts.separator).test(frontValue + chrs);
if (!strict && !isValid) {
isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs);
if (isValid) {
buffer[pos] = "0";
pos++;
return { "pos": pos };
}
}
return isValid;
}, cardinality: 1
}]
}
}
},
'dd.mm.yyyy': {
mask: "1.2.y",
placeholder: "dd.mm.yyyy",
leapday: "29.02.",
separator: '.',
alias: "dd/mm/yyyy"
},
'dd-mm-yyyy': {
mask: "1-2-y",
placeholder: "dd-mm-yyyy",
leapday: "29-02-",
separator: '-',
alias: "dd/mm/yyyy"
},
'mm.dd.yyyy': {
mask: "1.2.y",
placeholder: "mm.dd.yyyy",
leapday: "02.29.",
separator: '.',
alias: "mm/dd/yyyy"
},
'mm-dd-yyyy': {
mask: "1-2-y",
placeholder: "mm-dd-yyyy",
leapday: "02-29-",
separator: '-',
alias: "mm/dd/yyyy"
},
'yyyy.mm.dd': {
mask: "y.1.2",
placeholder: "yyyy.mm.dd",
leapday: ".02.29",
separator: '.',
alias: "yyyy/mm/dd"
},
'yyyy-mm-dd': {
mask: "y-1-2",
placeholder: "yyyy-mm-dd",
leapday: "-02-29",
separator: '-',
alias: "yyyy/mm/dd"
},
'datetime': {
mask: "1/2/y h:s",
placeholder: "dd/mm/yyyy hh:mm",
alias: "dd/mm/yyyy",
regex: {
hrspre: new RegExp("[012]"), //hours pre
hrs24: new RegExp("2[0-9]|1[3-9]"),
hrs: new RegExp("[01][0-9]|2[0-3]"), //hours
ampm: new RegExp("^[a|p|A|P][m|M]")
},
timeseparator: ':',
hourFormat: "24", // or 12
definitions: {
'h': { //hours
validator: function (chrs, buffer, pos, strict, opts) {
var isValid = opts.regex.hrs.test(chrs);
if (!strict && !isValid) {
if (chrs.charAt(1) == opts.timeseparator || "-.:".indexOf(chrs.charAt(1)) != -1) {
isValid = opts.regex.hrs.test("0" + chrs.charAt(0));
if (isValid) {
buffer[pos - 1] = "0";
buffer[pos] = chrs.charAt(0);
pos++;
return { "pos": pos };
}
}
}
if (isValid && opts.hourFormat !== "24" && opts.regex.hrs24.test(chrs)) {
var tmp = parseInt(chrs, 10);
if (tmp == 24) {
buffer[pos + 5] = "a";
buffer[pos + 6] = "m";
} else {
buffer[pos + 5] = "p";
buffer[pos + 6] = "m";
}
tmp = tmp - 12;
if (tmp < 10) {
buffer[pos] = tmp.toString();
buffer[pos - 1] = "0";
} else {
buffer[pos] = tmp.toString().charAt(1);
buffer[pos - 1] = tmp.toString().charAt(0);
}
return { "pos": pos, "c": buffer[pos] };
}
return isValid;
},
cardinality: 2,
prevalidator: [{
validator: function (chrs, buffer, pos, strict, opts) {
var isValid = opts.regex.hrspre.test(chrs);
if (!strict && !isValid) {
isValid = opts.regex.hrs.test("0" + chrs);
if (isValid) {
buffer[pos] = "0";
pos++;
return { "pos": pos };
}
}
return isValid;
}, cardinality: 1
}]
},
't': { //am/pm
validator: function (chrs, buffer, pos, strict, opts) {
return opts.regex.ampm.test(chrs + "m");
},
casing: "lower",
cardinality: 1
}
},
insertMode: false,
autoUnmask: false
},
'datetime12': {
mask: "1/2/y h:s t\\m",
placeholder: "dd/mm/yyyy hh:mm xm",
alias: "datetime",
hourFormat: "12"
},
'hh:mm t': {
mask: "h:s t\\m",
placeholder: "hh:mm xm",
alias: "datetime",
hourFormat: "12"
},
'h:s t': {
mask: "h:s t\\m",
placeholder: "hh:mm xm",
alias: "datetime",
hourFormat: "12"
},
'hh:mm:ss': {
mask: "h:s:s",
autoUnmask: false
},
'hh:mm': {
mask: "h:s",
autoUnmask: false
},
'date': {
alias: "dd/mm/yyyy" // "mm/dd/yyyy"
},
'mm/yyyy': {
mask: "1/y",
placeholder: "mm/yyyy",
leapday: "donotuse",
separator: '/',
alias: "mm/dd/yyyy"
}
});
})(jQuery);
Date :
2018-12-16 22:49:49
By :
หน้าฮี
ขออภัยทุกท่านที่ทำให้หัวร้อนกันนะครับ ผมทำได้ตั้งแต่วันแรกแล้วครับแล้วผมไม่มีเวลามาปิดกระทู้
ปัญหาคือไม่เกี่ยวกับ Code ครับ มันเกียวกับ format ของ Server ซึ่งผมก็เถียงกับหัวหน้างานตั้งนานว่ามันเกี่ยวกับ Server แต่หัวหน้าบอกว่าไม่เกี่ยว มันเกี่ยวกับ Format ผมเลยไปแอบเปลี่ยน Format Test ดู ผลสรุปว่า จัดรูปแบบได้ตามที่ผมทำครับ
ปล.ต้องขออภัยทุกท่านด้วยนะครับไม่มีเวลามาปิดกระทู้
Date :
2018-12-21 14:15:11
By :
wiraphon
จาก #NO 12 เดี่ยวคุณและหัวหน้าของคุณ จะหาว่าผมมั่ว
วันที่ก็คือวันที่ วันและเวลา และเป็นสากล เสมอ คิดได้แบบนี้ก็แสดงว่าเข้าใจได้ถ่องแท้ สักแต่ว่าเข้าใจ/ทำได้
--- ถ้าจิตใจไม่คับแคบจนเกินไปก็จะเข้าใจความจริงได้
จากตัวอย่างข้างล่าง ไม่จำเป็นต้องอนุมานได้ว่า วันที่ก็คงเป็นเช่นเดียวกัน
Code (VB.NET)
Imports System.Globalization
Public Class GlobalizationMgr
Structure Countries
Public Property ThreeLetterISORegionName As String 'THA
Public Property EnglishName As String 'Thailand
Public Property NativeName As String 'เช่น ไทย, ส.ป.ป ลาว เป็นต้น
End Structure
Public Shared Function GetCountryInfo() As List(Of String)
Dim lst As New List(Of String)
For Each info As CultureInfo In CultureInfo.GetCultures(CultureTypes.SpecificCultures)
Dim regInfo As RegionInfo = New RegionInfo(info.LCID)
If Not (lst.Contains(regInfo.EnglishName)) Then
lst.Add(regInfo.EnglishName)
End If
Next
lst.Sort()
Return lst
End Function
Public Shared Function GetCountriesInfo() As List(Of Countries)
Dim lst As New List(Of Countries)()
For Each info As CultureInfo In CultureInfo.GetCultures(CultureTypes.SpecificCultures)
Dim regInfo As RegionInfo = New RegionInfo(info.LCID)
If Not lst.Exists(Function(x) x.EnglishName.Equals(regInfo.EnglishName)) Then
lst.Add(New Countries() With {
.ThreeLetterISORegionName = regInfo.ThreeLetterISORegionName,
.EnglishName = regInfo.EnglishName,
.NativeName = regInfo.NativeName
}
)
End If
Next
Return lst.OrderBy(Function(x) x.ThreeLetterISORegionName).ToList()
End Function
End Class
Date :
2018-12-25 10:05:06
By :
หน้าฮี
จาก #NO 13 ถ้าคุณ/หลายฯคน ยังไม่เข้าใจ
ลองนึกถึงคำพูดประโยคนี้ "ความต้องการของลูกค้าคือสิ่งที่สำคัญ"
และ
ลองนึกถึงคำพูดประโยคนี้ "ชีวิตมนุษย์สำคัญที่สุด"
แสดงว่าไม่มีระบบใดฯในโลกนี้ที่จะสามารถรองรับได้
แต่ว่าเราสามารถรับรู้ได้
US? ก็เช่นเดียวกัน
Code (VB.NET)
Public Shared Function TryParseExactUS2Thai(ByVal usDateTime As DateTime, Optional ByVal dateSeperate As String = "/") As String
'Config Web Server Timezone = US & Canada (-5)
'in web.config or app.config (Windows Application)
'<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="en-US" enableClientBasedCulture="false"/>
Dim thCultureInfo As New System.Globalization.CultureInfo("th-TH") With {.DateTimeFormat = New Globalization.DateTimeFormatInfo() With
{
.Calendar = New System.Globalization.ThaiBuddhistCalendar
}
}
Try
Return usDateTime.ToString("yyyy" & dateSeperate & "MM" & dateSeperate & "dd" & " HH:mm:ss tt z g", thCultureInfo)
'Input Date : 2012/12/31 08:30:20 AM -5 A.D.
'Output String : 2555/12/31 20:30:20 PM +7 พ.ศ.
Catch ex As Exception
Return String.Empty
End Try
End Function
Date :
2018-12-25 10:20:45
By :
หน้าฮี
@ sent
มันก็ไม่แปลกที่คุณจะไม่เข้าใจ และแม้แต่ตัวของผมเองยังไม่เข้าใจตัวเองเลย
ผมเดาเอาว่าสาเหตุน่าจะมาจาก หน่วยนับ ของเราแตกต่างกัน อทิเช่น
ผมอยากเล่นกับหน่วยนับสามระดับ อทิเช่น กล่อง/โหล/ใบ (ใหญ่จริงฯ/กลาง/เล็กที่สุด)
อันนี้เป็นรูปที่ผมทำเอาไว้เมื่อปี พ.ศ. 2553
หน่วยนับของผมเป็นม้วน แต่ของคุณอาจจะเป็นอีกหน่วยหนึ่ง
ปล. คิดอะไรมาก วันพรุ่งนี้ก็เช้าแล้ว จะทำอะไรก็ว่ากันไป
Date :
2018-12-25 21:46:32
By :
หน้าฮี
สรุป แบบง่ายๆ
1 ข้อมูลวันที่ที่ใช้ในการคำนวณ ให้อยู่ในรูป คศ. ซึ่งเป็น วิธีการเก็บสากล
2 เมื่อต้องการโชว์ หน้าจอ ให้ใช้ function ที่ คห 14 มาใช้ คุณจะย้าย ปี ไปไว้หลัง เดือนไว้ กลาง วันไว้หน้า
ก็ทำจากตรงนั้น แต่อย่านำมาคำนวณอะไร เพราะมันไม่ถูกหลักสากล ต้องแปลงเป็นหลักสากลก่อน
เวลาแปลงข้อมูลจากไทยไปสากล ก็จัดรูปแบบให้เป็นตาม คห.17 (ใหญ่จริงฯ/กลาง/เล็กที่สุด หรือ ปปปป/ดด/วว) เป็นหลักเลขสากล
ซึ่งใช้คำนวณได้ ใช้เปรียบเทียบได้ ทุกอย่างที่คุณต้องการอยู่ในคห ที่คุณหน้าฮี โพสต์ไว้นั้นแหล่ะครับ
หาศึกษาการใช้ culture lang เพิ่มเติม
Date :
2018-12-26 09:39:16
By :
Chaidhanan
Code (VB.NET)
Imports System.Runtime.CompilerServices
Module Ext_TOR
<Extension()>
Public Function TryParseCultureInfo(ByVal _DateTime As DateTime, Optional ByVal _CultureInfo As String = "th-TH", Optional ByVal _datetimeFormat As String = "yyyy-MM-dd hh:mm:ss") As String
Dim CultureInfo_ As New System.Globalization.CultureInfo(_CultureInfo)
Try
Return _DateTime.ToString(_datetimeFormat, CultureInfo_)
Catch ex As Exception
Return String.Empty
End Try
End Function
End Module
Code (VB.NET)
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = Date.Now.TryParseCultureInfo("th-TH") & " " & Date.Now.TryParseCultureInfo("en-US")
End Sub
End Class
Date :
2018-12-26 10:38:19
By :
lamaka.tor
จาก #NO18 - #NO20
โลกโปรแกรมมิ่งมันเปลี่ยนไปและจะไม่มีวันกลับไปเหมือนเดิมได้อีกแล้ว เอาให้ชัดเจนที่สุด
--- รู้และเชี่ยวชาญแค่ภาษาเดียว มันก็ไม่แตกต่างกับอสุจิหลงทางเข้าไปข้างหลัง (ข้างหน้ามีแต่ไม่เข้า)
ในเชิงงานโปรแกรมมิ่งผมเป็นคนที่คิดไปไกลมาก อทิเช่น
--- .NET Core 2.2/3.0 ผมยังไม่ได้ตัดสินใจที่จะกระโดดลงไป (ลงไปตอนนี้ก็เหนื่อยเปล่า)
--- EF-Vxxx (Entity Framework) ก็เช่นเดียวกัน รองรับความต้องการของผมไม่ได้
--- Type Script (ES1-N) ผมก็ยังไม่ได้ตัดสินใจที่จะกระโดกลงไป (ลงไปตอนนี้ก็เหนื่อยเปล่า)
------ ท้ายที่สุดแล้วมันก็แปลงเป็น PURE JavaScript อยู่ดี (AngularJS/Angular_V1-Vx) ก็เช่นเดียวกัน
--- N-tire ---> with my self.
--- Client/Server สำหรับผมมันก็ไม่ตอบโจทย์
จากความคิดเห็นที่ 20 ผมก็มองออกแบบทะลุปรุโปร่ง ดีไหม? ดีแต่ยังไม่ดีที่สุด (ไม่มีอะไรดีที่สุด)
ทางแก้ไขปัญหาของผมก็คือ Back to the basic/สูงสุดคือนสู่สามัญ
นั่นก็คือการใช้ Name Space เข้ามาช่วยแก้ไขปัญหา (บังคับ)
เช่น ฝั่ง Client/ทุกฯอุปกรณ์
Code (JavaScript)
WL_Standard = {} || {}; //Main JavaScript namespace
WL_Standard.dateHelper = WL_Standard.dateHelper || {}; //Date Manager namespace
(function (wls) {
//return a date.
wls.dateHelper.addDays = function (jsDate, nod) { //nod = number of days.
return jsDate.setDate(jsDate.getDate() + nod);
};
//Input : ISO "2016-12-31T07:45:00Z"
//Output : "31-12-2016"
wls.dateHelper.stringDateDDMMYYYYY = function (strDate) {
let d = new Date(strDate); //ISO "2016-07-27T07:45:00Z"
return ('0' + d.getDate()).slice(-2) + '-' + ('0' + d.getMonth()).slice(-2) + '-' + d.getFullYear();
}
}(WL_Standard));
...
...
...
Date :
2018-12-27 14:57:36
By :
หน้าฮี
จาก#NO 21 ยกตัวอย่างเพิ่มเติม เช่น
WebService/Clund ดีไหม ผมตอบว่าดีแต่ยังยังไม่ดีที่สุด ณ.เวลาปัจจุบัน (27 ธันวาคม พ.ศ. 2561)
--- มันมีเทคโนโลยีมากมายที่ต่อยอดมาจาก Web Service ดีกว่า/หลากหลายกว่า เช่น JSON จริงฯ ไม่ใช่ JSON ปลอมฯ
...
...
...
Date :
2018-12-27 15:09:35
By :
หน้าฮี
อันนี้เป็นโปรแกรมที่ผมสั่ง โปรแกรม ASS Windows Application ให้ทำงานตามที่ผมต้องการ ผ่านเวป
(สั่งได้หมดตามที่ผมต้องการ)
คิดดูว่าตู้นี้มีกี่หัวจ่ายล่ะ?
--- มากกว่าสิบหัวจ่ายก็แล้วกัน
Code (C#)
/// <summary>
/// รับค่า จำนวนลิตรที่เต็ม/เต็มจริง/ยอดเงินสุทธิ จาก ASS Application Windows form Client
/// </summary>
/// <param name="request"></param>
/// <param name="connectionId"></param>
/// <param name="data"></param>
/// <returns></returns>
protected override Task OnReceivedOil(IRequest request, string connectionId, string data)
{
//จะทำอะไรก็ว่ากันไปครับผม
//อทิเช่น เก็บค่าล่าสุดเอาไว้ 10 ค่า
int cnt = ASS_Server_CS.ASSConnection.lstMessage.Count();
if (cnt > 10)
{
ASS_Server_CS.ASSConnection.lstMessage.RemoveAt(0); //ถีบตัวแรกออก และถ่างตัวที่สิบ
}
lstMessage.Add(data);
return Connection.MakeLove(data);
}
Date :
2018-12-27 15:23:27
By :
หน้าฮี
Date :
2018-12-27 15:24:09
By :
หน้าฮี
Date :
2018-12-27 15:39:04
By :
หน้าฮี
ปี พ.ศ 2563 ผมตั้งใจศึกษา PLC ด้วยตัวเอง
ถ้าผมเข้าใจอย่างถ่องแท้ +++++ 55555
ปี พ.ศ 2564 ค่อยมาว่ากันอีกทีหนึ่ง
ปล. ผมเลียหอยเป็น ทำไมจะศึกษา PLC ด้วยตัวเองไม่เป็นล่ะ? +55555
Date :
2018-12-27 15:48:06
By :
หน้าฮี
จาก #NO26 ผมต้องเรียนฟรี แน่นอนว่าผมมีแผน
เผาทำเนียบเม่งเลย
เพราะผมรู้ว่า ใน "คุก" มีสอนฟรี
ข้าวก็ฟรี
อะไรฯก็ฟรี
+55555
Date :
2018-12-27 15:54:26
By :
หน้าฮี
Load balance : Server 04